# Chifty, your integration assistant Source: https://docs.chift.eu/ai/chifty Ask anything about your integrations in plain language and get a clear answer with the next action Chifty is a premium AI-powered feature, currently in beta. During the beta, it is free for all accounts. Share your feedback to help shape what comes next. Hi! I'm Chifty, the AI assistant built into the Chift platform. Glad to finally introduce myself 👋 When an integration fails, finding out why usually means *digging through connection states, API logs and third-party error messages...* **That digging is my job**: ask me a question in plain language and I query your account data live, **then answer with a diagnosis and the concrete next action.** ## Where to find me? Open me from the button at the bottom of the platform sidebar. Conversations are saved per user and your history is yours alone: start a new chat anytime and pick up previous ones from the history.
The Chifty button at the bottom of the platform sidebar The Chifty panel: conversation history on the left, a new chat ready to go
## What I can do While I work, I show each step I take, so you always know where an answer comes from. Here is what each of those steps means: * **Searching consumers**: I find a consumer by name, identifier, reference or email, and check the state of every connection: active, waiting for an OAuth login, failed during setup. For on-premise connectors, I also check whether the local agent is up and read its recent errors. * **Searching transactions**: I read the recent API activity, successes and errors, to tell live problems apart from ones that already resolved themselves, and see which routes fail since when. * **Inspecting a transaction**: I open a failing API call and read the actual response of the third-party system. That error message is usually the answer. * **Checking syncs**: I check your sync automations: which flows are currently failing, for which consumers, and whether one outage is hitting many consumers at once. * **Searching synced data**: I search the data your syncs recorded, to answer "was this invoice synced?" or find the error trace a sync left behind for a specific element. * **Reading the documentation**: I know the Chift connector support documentation (setup steps, prerequisites, known errors) and use it to give precise, connector-aware guidance. This documentation site, the one you are reading right now, is next on my reading list. And yes, I genuinely enjoy reading error logs. Someone has to 😭 How does that play out for you? It depends on how you use Chift. I speak both languages of the platform, pick your side of the story: Broken connections, failing API calls, third-party errors: I find out why a consumer stopped working. Failing flows, missing invoices, error traces: I find out why an automation stopped delivering. ## For Unified API accounts Your consumers connect once through the Unified API, and when one stops working the question is always the same: is it the connection, the calls, or the third-party system? (Between us: it is very often an expired token.) That is my home turf. I check the state of every connection (active, waiting for an OAuth login, failed during setup), scan the recent API activity to separate live problems from resolved ones, and when a call fails I read the actual error the third-party returned. Sometimes the answer hides deeper: here, a connection that shows Active while nothing ever flowed, and a consumer ID is all I needed: A full Chifty conversation: a connection that looks active, a local agent that never connected, and the setup steps to fix it Every answer follows the same shape: * **Diagnosis**: what is really going on, beyond the status. Here the Sage 100 FR connection shows Active, but I spotted that its local agent never connected: zero activity since the connection was created, and the recent API calls are only status checks. * **Action**: the concrete next steps. Here, install the local agent on the Sage 100 server, and if it is supposedly installed already, check the Windows service and the firewall. Once the agent reports, I re-check. Some questions that work well: * "What's going on with Acme Corp?" * "Is the local agent of Acme Corp connected?" * "How do I set up an Exact Online connection?" Skip the next section and jump straight to my usage tips. ## For Syncs accounts Your consumers run sync automations, and when data stops flowing the question is different: which flow is failing, since when, for whom, and what happened to that one invoice? (There is always that one invoice.) I check your syncs on my own, before you even mention them: which flows are failing and for which consumers, whether one outage is hitting many consumers at once (often a connector-side incident), and what your syncs actually recorded, down to a single invoice and the error trace it left behind. Here is a real diagnosis, step by step: I find the consumer, read its documentation, scan the API calls of the failing run, check the flows, then search the synced data for the error traces: The steps Chifty takes while diagnosing a sync: searching consumers, reading the documentation, checking transactions, syncs and synced data Some questions that work well: * "Why is the Pennylane sync failing?" * "Was invoice INV-2041 synced?" * "Is my customer's data up to date?"
## How to get the best out of me \<3 * **Name the consumer precisely**: the name as it appears in the platform, an identifier, a reference or an email all work. * **Paste full identifiers**: for an invoice or order number, give me the complete value, or at least how it starts. I match values from their very first characters. * **Give me a timeframe when it matters**: "since Monday" or "after yesterday's run" helps me separate the live problem from old noise. ## Good to know * I work **read-only**: your consumers, connections and configuration stay exactly as they are. I can tell you what broke, never be what broke it. * I see the platform exactly as you do: same account, same environment, same permissions. When a check needs a permission you are missing, your workspace admin can grant it. * I only report what I actually verified, and I tell you plainly when something was out of my reach. * Ask in your own words, in your own language: I answer in yours. * I stick to your integrations. Ask me for movie recommendations and I will politely bring us back to your connections. ## What's coming next? I keep learning. Here is what my team is working on: * **Sync run logs**: reading the execution logs the sync engine writes, so I can quote the exact reason a run failed straight from the source. * **Issues awareness**: connecting to the Issues module, so I speak the same language as your Issues page and know what was already resolved. * **Sync configuration checks**: looking at how a sync is configured (mappings, parameters), to catch setup problems before they become failed runs. * **Full documentation access**: learning this very documentation site, API reference and guides included, on top of the connector support docs I already know. * **Onboarding help**: guiding you through your first steps on the platform, from creating a connection to your first successful call or sync. And that is only the short list. I'm young, I learn fast, and much more is on the way: keep an eye on the [changelog](/changelogs/2026-07) to see what I picked up. *** That's me! Next time an integration acts up, ask me first and let me do the digging. See you in the platform 👋 # Chift CLI Source: https://docs.chift.eu/ai/cli Use the Chift CLI to discover and call Chift API endpoints from a terminal or coding agent ## Command-line access to Chift Use the Chift CLI to discover Chift API operations, inspect required inputs, and call Unified API endpoints with structured output from your terminal or coding agent. Chift's API is organized around consumers, connections, integrations, and Unified APIs such as accounting, POS, ecommerce, invoicing, banking, payment, and PMS. The CLI keeps those concepts close to the terminal. Most API commands follow the same grouped structure as the API reference and use the `consumer_id` as the route context for endpoints that act on a specific consumer. Return structured JSON or YAML and keep responses focused for smaller AI context. View the source, report issues, or contribute on GitHub. ## Installation Download and install the latest release with a single command. ```bash theme={null} curl -fsSL https://raw.githubusercontent.com/chift-oneapi/chift-cli/master/install.sh | sh ``` Save your Chift account ID, client ID, and client secret once. The CLI validates the credentials by fetching an access token. Missing values open an interactive terminal form. ```bash theme={null} chift auth setup chift auth check ``` You can also pass credentials directly for non-interactive use: ```bash theme={null} chift auth setup \ --account-id \ --client-id \ --client-secret ``` On first use the CLI fetches and caches the OpenAPI schema automatically. Browse available commands, search for an operation, or use `--next` at any level to see what to do next. ```bash theme={null} chift --help chift accounting --help chift schema search supplier chift accounting suppliers --next ``` To update an existing install: ```bash theme={null} chift update ``` ## Agent skill The CLI ships with an agent skill that teaches coding agents how to drive it. Install the skill with the [`skills`](https://www.skills.sh/docs) CLI: ```bash theme={null} npx skills add chift-oneapi/chift-cli ``` ## Discovering and calling endpoints ### Inspecting endpoint inputs Use `--schema` or `--next` to see the merged input schema before calling an endpoint. The CLI rejects unknown parameters before sending any request. ```bash theme={null} chift accounting suppliers get --schema chift accounting suppliers get --next ``` ### Passing inputs `consumer_id` is route context. Set it once via environment variable or pass it as the first positional argument: ```bash theme={null} export CHIFT_CONSUMER_ID= chift accounting folders list # or inline: chift accounting folders list ``` Pass other path and query parameters as `KEY=VALUE` positional values or with `--param`: ```bash theme={null} chift accounting suppliers get supplier_id= chift accounting suppliers get \ --param supplier_id= \ --param folder_id= ``` ### Posting data For `POST` and `PATCH` operations, pass a JSON body with `--json` or use `KEY=VALUE` pairs. Mutating operations require `--force`. ```bash theme={null} chift accounting suppliers create \ --force \ name="Acme Corp" \ currency_code=EUR chift accounting suppliers create \ --force \ --json '{"name": "Acme Corp", "currency_code": "EUR"}' ``` ### Output and filtering API commands return JSON by default. Use `--output yaml` for YAML, or `--debug` to write debug logs to stderr. ```bash theme={null} chift accounting folders list --fields id,name,parent.id chift accounting suppliers list --filter name=Acme chift accounting suppliers list page=2 size=50 ``` `--fields` keeps only selected fields from the response. `--filter` filters list responses client-side. For paginated responses, the CLI applies both to the `items` array. Pagination uses the API's own `page` and `size` query parameters. ## Environment variables The CLI loads environment variables at startup from a `.env` file or shell exports. | Variable | Description | Default | | ------------------------------- | ---------------------------------------------------------------------------------------- | ------- | | `CHIFT_CONSUMER_ID` | Default consumer, avoids passing `consumer_id` on every command | — | | `CHIFT_ALLOWED_OPERATIONS` | Comma-separated list of allowed operation classes: `read`, `write`, `dangerous`, `all` | all | | `CHIFT_SHOW_PLATFORM_ENDPOINTS` | Show `consumers`, `integrations`, and `connections` endpoint groups | `false` | | `CHIFT_SHOW_INTERNAL_ENDPOINTS` | Show `general`, `datastores`, `syncs`, `issues`, `m-c-p`, and `webhooks` endpoint groups | `false` | ### Restricting operations Set `CHIFT_ALLOWED_OPERATIONS` to limit which operation classes the CLI executes for business vertical endpoints. This is particularly useful for AI agents that should only read data. ```bash theme={null} CHIFT_ALLOWED_OPERATIONS=read chift accounting suppliers list ``` Scope metadata takes precedence when present. Without scopes, `GET`/`HEAD`/`OPTIONS` are `read`, `POST`/`PATCH` are `write`, and `DELETE` is `dangerous`. Platform and internal endpoint groups keep their full command set regardless of this setting. ## Schema cache The command tree is generated from the OpenAPI schema. The CLI fetches and caches the schema automatically on first use. Refresh it manually when needed: ```bash theme={null} chift schema update chift schema tree chift schema search invoice ``` ## Why it helps AI workflows AI coding tools work best when they can discover capabilities, inspect schemas, and receive compact structured output. The Chift CLI supports that workflow by: * Discovering available Chift API operations from the terminal * Guiding agents step-by-step with `--next` at any command level * Inspecting the inputs required by an endpoint before sending a request * Returning JSON by default, with YAML available when needed * Reducing large responses with `--fields` and `--filter` * Restricting operations with `CHIFT_ALLOWED_OPERATIONS` so agents only perform safe actions * Requiring `--force` for mutating operations such as `POST`, `PATCH`, `PUT`, and `DELETE` For AI agents, start with `chift auth check`, use `chift schema search` or `--help` to discover the right endpoint, then call `--schema` before sending business data. Set `CHIFT_ALLOWED_OPERATIONS=read` to prevent accidental writes. ## Relationship with MCP The [Chift MCP server](/ai/mcp) is the recommended option when your AI tool supports MCP and should access Chift through a tool interface. The CLI is a strong complement for terminal-based agents, local scripts, CI checks, and debugging sessions. Use it whenever you want to see the exact API request and response shape. # AI-enhanced documentation Source: https://docs.chift.eu/ai/documentation Leverage intelligent search and LLM-optimized content for faster development ## Smart documentation features Chift's documentation is optimized for AI consumption, allowing you to get more accurate responses when using our docs as context for LLMs and AI tools. Industry-standard formats that help LLMs understand and index our documentation efficiently Vector-based search through our MCP server for contextual, semantic results ## Available AI features ### LLM-optimized files You can use ready-to-use formats designed for AI tools: * **[llms.txt](https://docs.chift.eu/llms.txt)** — Industry standard for efficient LLM indexing (like a sitemap for AI) * **[llms-full.txt](https://docs.chift.eu/llms-full.txt)** — Complete documentation in a single file for AI context * View page markdown and full text by adding .md at the end of every URL. ### MCP integration The SearchChift tool is available via our [local MCP server](/ai/mcp/local#documentation-search): * Search documentation using a vector database approach * Find results with semantic similarity matching * Integrate directly with your coding editors ### Chift CLI The [Chift CLI](/ai/cli) gives coding agents and developers a terminal-first way to explore Chift's API: * Discover available API operations from the terminal * Search endpoint metadata with `chift schema search` * Inspect endpoint input schemas with `--schema` * Return JSON or YAML output that can be filtered before it is sent back into an AI context ## How to use * **Direct Files** - Use llms.txt or llms-full.txt for AI context * **Interactive Search** - Use built-in AI features on documentation pages * **MCP Integration** - Connect via SearchChift tool for coding workflows * **Chift CLI** - Use terminal-based schema discovery and API calls in coding agents or scripts Connect your preferred AI tools (Claude, ChatGPT, Cursor) to access Chift documentation intelligently. ## SearchChift MCP tool The local MCP server includes a `SearchChift` tool that searches the entire Chift documentation like a vector database: pass a query and retrieve the passages that match semantically, directly in your coding assistant. See [Documentation search](/ai/mcp/local#documentation-search) on the local server page for how to enable and use it. ## Quick access Learn how to set up the MCP server and use SearchChift for documentation search Explore and call Chift's Unified API from a terminal or coding agent # AI-powered development with Chift Source: https://docs.chift.eu/ai/introduction Supercharge your development workflow with AI tools, MCP integration, and intelligent documentation features ## Transform your development experience Chift empowers developers to build faster and smarter by integrating AI directly into their workflow. Whether you're connecting to financial APIs, building integrations, or exploring our documentation, our AI tools are designed to accelerate your development process. Connect your AI agents directly to Chift APIs using the Model Context Protocol Leverage intelligent search, context generation, and LLM-optimized content Explore and call Chift's Unified API from a terminal or coding agent Diagnose integration issues from the dashboard by asking questions in plain language ## What you can build **Build intelligent financial agents** that can: * Connect to your accounting, POS, ecommerce, ... data automatically across platforms * Generate financial reports and insights * Handle complex multi-step financial workflows * Respond to natural language queries about financial data **Enhance your development workflow** with: * Full context coding agents * Search across the whole Chift documentation * Automatic API discovery and mapping **Use the Chift CLI** to: * Authenticate once with your Chift API credentials * Discover available API operations from the terminal * Call accounting, POS, ecommerce, invoicing, banking, payment, and PMS endpoints from scripts or coding agents * Inspect endpoint input schemas before sending requests ## Key features ### Model Context Protocol (MCP) Connect your favorite AI tools (Claude, Cursor, Windsurf) directly to Chift's unified API. No more context switching between documentation and your development environment. The MCP server provides 50+ tools covering all major financial operations: accounting, invoicing, payments, POS, and more. ### Chift CLI Use the [Chift CLI](/ai/cli) when you want a terminal-first way to explore and interact with Chift's Unified API. The CLI helps coding agents discover endpoint inputs, call API operations, and return JSON or YAML that is easy to inspect, filter, or pass into scripts. ## Getting started Decide how you want to integrate Chift into your workflow: * [Remote server](/ai/mcp/remote) - For AI agents and automated workflows * [Local server](/ai/mcp/local) - For local access to your data * [Chift CLI](/ai/cli) - For terminal-based discovery, scripts, and coding agents Get your credentials from the Chift platform and configure your environment. Use our examples, documentation, and AI tools to build your integration and AI agents quickly. ## Use cases Build AI agents that automatically sync data between different financial systems. Handle edge cases and perform data transformation intelligently. Create systems that generate financial reports, insights, and analytics using natural language queries and AI-powered data analysis. Questions about AI integration? Our support team is ready to help you build amazing AI-powered financial applications. # Model Context Protocol (MCP) Source: https://docs.chift.eu/ai/mcp Connect AI agents and coding tools to Chift's Unified API through the Model Context Protocol ## Overview The Chift Model Context Protocol (MCP) server exposes the Chift [Unified API](/api-reference) as a set of tools that any LLM or agent framework supporting the [MCP protocol](https://modelcontextprotocol.io/introduction) (Claude, Cursor, VS Code, and others) can call directly. Instead of wiring up each endpoint by hand, your agent discovers the operations it is allowed to use and calls them like native functions. The tools mirror the Chift Unified API one-to-one and cover every vertical: accounting, banking, ecommerce, invoicing, payment, PMS, and POS. Because the tools map directly to the API, an agent can both read and write across your integrations. Asking an assistant to create an invoice, for example, walks through the same steps you would: it locates the customer, checks the VAT and revenue coding already used in the ledger, and posts a consistent invoice. An AI assistant creating an invoice through the Chift MCP server, locating the customer and posting it to the accounting system ## Two ways to run the MCP server Chift offers two MCP servers. They share the same tool model but are built for different jobs, so pick the one that matches what you are doing. ### Remote MCP server The [remote server](/ai/mcp/remote) is hosted by Chift at `https://mcp.chift.eu/mcp`. You point an MCP client at that URL, authorize through Chift, and you are connected, with nothing to install or run. It is designed to be **productized**: authorization is tied to a **single consumer**, and the tools an agent sees are limited to the **scopes** granted during that authorization. That makes it the right choice when you embed Chift in your own product or build an agent that acts on behalf of one of your customers, with a deliberately bounded set of tools. When the authorized consumer is connected to the [DataLayer](/developer-guides/datalayer/overview), reads are served from Chift's synced data store, so your agent's queries stay fast and are not throttled by the source system's rate limits. ### Local MCP server The [local server](/ai/mcp/local) is an open-source Python package you run on your own machine over `stdio`. You authenticate once with your Chift API credentials, and it can work across **all of your consumers** rather than a single one. It is designed for **builders**: if you have a Chift account with several consumers and you want an assistant that helps you configure Chift and explore the Unified API across them, this is the one to use. It also ships an optional [documentation search](/ai/mcp/local#documentation-search) tool that brings the entire Chift documentation into your coding assistant's context. ## Which one should I use? * Building an agent or product feature that operates on **one consumer** with a **fixed, scoped** set of tools → use the [remote server](/ai/mcp/remote). * Working as a **builder** who needs an assistant across **many consumers** to set up and explore Chift, ideally with documentation search → use the [local server](/ai/mcp/local). # Local MCP server Source: https://docs.chift.eu/ai/mcp/local Run the open-source Chift MCP server locally to explore and configure Chift across your consumers ## Overview The local MCP server is an open-source Python package you run on your own machine over `stdio`. You authenticate once with your Chift API credentials, and unlike the [remote server](/ai/mcp/remote) it can work across **all of your consumers** rather than a single one. It is built for **builders**: if you have a Chift account with several consumers and you want an assistant that helps you configure Chift and explore the Unified API across them, the local server is the right tool. It also offers an optional [documentation search](#documentation-search) tool that brings the entire Chift documentation into your coding assistant's context. The source code is available on [GitHub](https://github.com/chift-oneapi/chift-mcp). ### Prerequisites * A Chift account with API credentials (client ID, client secret, and account ID). * Python 3.11 or higher. * The [uv](https://docs.astral.sh/uv/) package manager. More detail on prerequisites is available in the [project README](https://github.com/chift-oneapi/chift-mcp?tab=readme-ov-file#prerequisites). ## Installation The server runs with `uvx`, which fetches and launches the package in one step: ```bash theme={null} uvx chift-mcp-server@latest ``` You normally do not run this by hand. Your MCP client launches it for you using the configuration in [Connecting your client](#connecting-your-client). Set your credentials as environment variables first (see [Configuration](#configuration)). ## Configuration The server reads its configuration from environment variables (prefixed with `CHIFT_`), which you can set in your MCP client configuration or a local `.env` file. | Variable | Description | Required | | ----------------------- | ---------------------------------------------------------------------------------------------------------- | -------- | | `CHIFT_CLIENT_ID` | Your Chift client ID | Yes | | `CHIFT_CLIENT_SECRET` | Your Chift client secret | Yes | | `CHIFT_ACCOUNT_ID` | Your Chift account ID | Yes | | `CHIFT_CONSUMER_ID` | Restrict the server to a single consumer. Leave unset to work across all of your consumers | No | | `CHIFT_SEARCH` | Set to `true` to enable the [documentation search](#documentation-search) tool (defaults to `false`) | No | | `CHIFT_FUNCTION_CONFIG` | Restrict which operations are available per domain (see [Function configuration](#function-configuration)) | No | Leaving `CHIFT_CONSUMER_ID` unset is what makes the local server useful to builders: the assistant can discover and work across every consumer on your account. Set it when you want to pin a session to one consumer. ## Connecting your client ### IDE configuration Add the following to your `claude_desktop_config.json`: ```json theme={null} { "mcpServers": { "chift": { "command": "/path/to/uvx", "args": ["chift-mcp-server@latest"], "env": { "CHIFT_CLIENT_SECRET": "your_client_secret", "CHIFT_CLIENT_ID": "your_client_id", "CHIFT_ACCOUNT_ID": "your_account_id", "CHIFT_CONSUMER_ID": "your_consumer_id", // Optional "CHIFT_SEARCH": true // Optional, defaults to false } } } } ``` Add the following to your `~/.cursor/mcp.json` file: ```json theme={null} { "mcpServers": { "chift": { "command": "/path/to/uvx", "args": ["chift-mcp-server@latest"], "env": { "CHIFT_CLIENT_SECRET": "your_client_secret", "CHIFT_CLIENT_ID": "your_client_id", "CHIFT_ACCOUNT_ID": "your_account_id", "CHIFT_CONSUMER_ID": "your_consumer_id", // Optional "CHIFT_SEARCH": true // Optional, defaults to false } } } } ``` Add the following to your `.vscode/mcp.json` file: ```json theme={null} { "servers": { "chift": { "type": "stdio", "command": "/path/to/uvx", "args": ["chift-mcp-server@latest"], "env": { "CHIFT_CLIENT_SECRET": "your_client_secret", "CHIFT_CLIENT_ID": "your_client_id", "CHIFT_ACCOUNT_ID": "your_account_id", "CHIFT_CONSUMER_ID": "your_consumer_id", // Optional "CHIFT_SEARCH": true // Optional, defaults to false } } } } ``` Add the server, then set your environment variables: ```bash theme={null} claude mcp add --transport stdio chift /path/to/uvx chift-mcp-server@latest ``` ```bash theme={null} export CHIFT_CLIENT_SECRET="your_client_secret" export CHIFT_CLIENT_ID="your_client_id" export CHIFT_ACCOUNT_ID="your_account_id" export CHIFT_CONSUMER_ID="your_consumer_id" # Optional export CHIFT_SEARCH=true # Optional, defaults to false ``` ### Using with AI frameworks When running locally you integrate the server over `stdio` transport. ```typescript theme={null} import { createMCPClient } from "@ai-sdk/mcp"; import { generateText } from "ai"; import { openai } from "@ai-sdk/openai"; async function getTools() { const mcpClient = createMCPClient({ command: "uvx", args: ["chift-mcp-server@latest"], env: { CHIFT_CLIENT_SECRET: process.env.CHIFT_CLIENT_SECRET, CHIFT_CLIENT_ID: process.env.CHIFT_CLIENT_ID, CHIFT_ACCOUNT_ID: process.env.CHIFT_ACCOUNT_ID, CHIFT_CONSUMER_ID: process.env.CHIFT_CONSUMER_ID, CHIFT_SEARCH: "true", }, }); return await mcpClient.listTools(); } const result = await generateText({ model: openai("gpt-4"), tools: await getTools(), prompt: "Search the documentation for webhook authentication", }); ``` ```python theme={null} from pydantic_ai import Agent from pydantic_ai.mcp import MCPServerStdio async def main(): tools = MCPServerStdio( command="uvx", args=["chift-mcp-server@latest"], env={ "CHIFT_CLIENT_SECRET": "your_client_secret", "CHIFT_CLIENT_ID": "your_client_id", "CHIFT_ACCOUNT_ID": "your_account_id", "CHIFT_CONSUMER_ID": "your_consumer_id", "CHIFT_SEARCH": "true", } ) agent = Agent("openai:gpt-4", toolsets=[tools]) result = await agent.run("Search documentation for webhook setup") print(result.output) if __name__ == "__main__": import asyncio asyncio.run(main()) ``` ```python theme={null} from langchain_mcp_adapters.client import MultiServerMCPClient from langchain.agents import create_agent from langchain_openai import ChatOpenAI import os async def get_tools(): client = MultiServerMCPClient({ "chift": { "command": "uvx", "args": ["chift-mcp-server@latest"], "transport": "stdio", "env": { "CHIFT_CLIENT_SECRET": os.getenv("CHIFT_CLIENT_SECRET"), "CHIFT_CLIENT_ID": os.getenv("CHIFT_CLIENT_ID"), "CHIFT_ACCOUNT_ID": os.getenv("CHIFT_ACCOUNT_ID"), "CHIFT_CONSUMER_ID": os.getenv("CHIFT_CONSUMER_ID"), "CHIFT_SEARCH": "true", } } }) tools = await client.get_tools() return tools async def main(): tools = await get_tools() llm = ChatOpenAI(model="gpt-4") agent = create_agent({ "model": llm, "tools": tools, }) result = agent.invoke({ "messages": [("user", "Search documentation for webhook setup")] }) print(result) if __name__ == "__main__": import asyncio asyncio.run(main()) ``` ```typescript theme={null} import { MultiServerMCPClient } from "@langchain/mcp-adapters"; import { ChatOpenAI } from "@langchain/openai"; import { createAgent } from "langchain/agents"; async function getTools() { const client = new MultiServerMCPClient({ chift: { transport: "stdio", command: "uvx", args: ["chift-mcp-server@latest"], env: { CHIFT_CLIENT_SECRET: process.env.CHIFT_CLIENT_SECRET!, CHIFT_CLIENT_ID: process.env.CHIFT_CLIENT_ID!, CHIFT_ACCOUNT_ID: process.env.CHIFT_ACCOUNT_ID!, CHIFT_CONSUMER_ID: process.env.CHIFT_CONSUMER_ID!, CHIFT_SEARCH: "true", }, }, }); return await client.getTools(); } async function main() { const tools = await getTools(); const llm = new ChatOpenAI({ model: "gpt-4", }); const agent = createAgent({ model: llm, tools: tools, }); const result = await agent.invoke({ messages: [["user", "Search documentation for webhook authentication"]], }); console.log(result); } main(); ``` ## Function configuration By default, all operations are enabled for every domain: ```json theme={null} { "accounting": ["get", "create", "update", "add"], "banking": ["get", "create", "update", "add"], "ecommerce": ["get", "create", "update", "add"], "invoicing": ["get", "create", "update", "add"], "payment": ["get", "create", "update", "add"], "pms": ["get", "create", "update", "add"], "pos": ["get", "create", "update", "add"] } ``` Set the `CHIFT_FUNCTION_CONFIG` environment variable to restrict which operations are exposed per domain, for example to give an assistant read-only access. More detail is available in the [project README](https://github.com/chift-oneapi/chift-mcp?tab=readme-ov-file#%EF%B8%8F-function-configuration). Function configuration is specific to the local server. The [remote server](/ai/mcp/remote) uses OAuth scopes to control which operations are available. ## Documentation search The local server can expose a `SearchChift` tool that searches the entire Chift documentation like a vector database: pass a query and retrieve the documentation passages that match semantically. It brings Chift documentation directly into your coding assistant's context, which helps it integrate Chift faster. The tool is off by default. Enable it by setting: ```bash theme={null} CHIFT_SEARCH=true ``` ```javascript theme={null} // Search documentation via MCP const result = await mcp.call_tool('SearchChift', { query: 'How to authenticate webhook requests?' }); ``` # Remote MCP server Source: https://docs.chift.eu/ai/mcp/remote Connect an MCP client to Chift's hosted server over OAuth, scoped to a single consumer ## Overview The remote MCP server is hosted by Chift at `https://mcp.chift.eu/mcp`. There is nothing to install: you point an MCP client at that URL and authorize through the Chift OAuth flow. Each authorization is tied to a **single consumer**, and the tools an agent can see are limited to the [**scopes**](#scopes) granted during authorization. This makes the remote server well suited to productized, agentic use cases where an assistant acts on behalf of one of your customers with a deliberately bounded set of tools. ### Prerequisites * A [Chift account](https://chift.app) with at least one consumer that has active integrations. * An MCP-compatible client (Claude Desktop, Cursor, VS Code, Claude Code, or any framework that supports MCP). ## DataLayer If the consumer you authorized is connected to the [DataLayer](/developer-guides/datalayer/overview), the server automatically uses it as the source of truth for read operations. Your agent's queries are served from Chift's synced data store rather than hitting the source system live on every request, which keeps responses fast and consistent. No configuration is required. When a consumer is connected to the DataLayer, reads route through it automatically. ## Authentication The remote server supports **OAuth 2.0** with **Dynamic Client Registration ([RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591))**. Point your MCP client at `https://mcp.chift.eu/mcp` and it handles client registration, the login redirect, and credential storage for you. Point your MCP client at `https://mcp.chift.eu/mcp` (see [Connecting your client](#connecting-your-client)). On first use, the client opens a browser on Chift. Log in, pick the **consumer** the agent will act on, and select the **scopes** to grant. Chift OAuth consent screen: choosing a consumer and the scopes to grant to an MCP client The client stores the connection and the agent can call the granted tools. Reconnecting reuses the saved credentials, so you will not be asked to authorize again. #### Scopes Scopes decide which tools an agent sees. They are defined at **two levels**: * The set a **builder makes available** for their integration, configured on the [MCP settings page](/back-office/platform/mcp). * The subset a **user grants** during authorization. An agent only ever sees tools for the scopes granted at authorization, and never more than the builder allows. Each scope is a vertical (such as `accounting`) that you can narrow to **read only** or to **specific entities** (for example, only invoices and VAT codes). Scope selection for a vertical, expanded to show per-entity read and write toggles This method is maintained for backward compatibility. We recommend the OAuth 2.0 flow for new integrations. Request an access token with a POST to `https://api.chift.eu/mcp-token`, then pass it to your client as a bearer token. ```bash theme={null} curl -X POST 'https://api.chift.eu/mcp-token' \ -H 'Content-Type: application/json' \ -d '{ "clientId": "your_client_id", "clientSecret": "your_client_secret", "accountId": "your_account_id", "consumerId": "your_consumer_id" }' ``` **Response:** ```json theme={null} { "access_token": "your_mcp_access_token", "token_type": "bearer", "expires_in": 1800, "expires_on": 1234567890 } ``` Your Chift client ID Your Chift client secret Your Chift account ID (UUID format) Your consumer ID (UUID format) Optional environment ID (UUID format) Optional marketplace ID (UUID format) Add the token to your client with an `Authorization: Bearer ` header (see the examples in [Connecting your client](#connecting-your-client)). ## Connecting your client Point your client at `https://mcp.chift.eu/mcp`. Each client sets up the connection and authentication slightly differently, so follow the tab for the one you use. ### IDE configuration Claude Desktop cannot connect to a remote server directly, so it uses the [`mcp-remote`](https://github.com/geelen/mcp-remote) bridge. Add the following to your `claude_desktop_config.json`: ```json theme={null} { "mcpServers": { "chift-remote": { "command": "/path/to/npx", "args": [ "mcp-remote", "https://mcp.chift.eu/mcp", "--transport", "http-only", "--header", "Authorization:${AUTH_HEADER}" ], "env": { "AUTH_HEADER": "Bearer " } } } } ``` The example above authenticates with a [legacy token](#authentication) passed through `AUTH_HEADER`. To use OAuth instead, remove the `--header` argument and the `AUTH_HEADER` env var: `mcp-remote` then opens a browser for you to log in and authorize on first use. [Install in Cursor](cursor://anysphere.cursor-deeplink/mcp/install?name=chift\&config=eyJ1cmwiOiJodHRwczovL21jcC5jaGlmdC5ldS9tY3AifQ%3D%3D) Click install to open Cursor and add the Chift MCP automatically, or add the following to your `~/.cursor/mcp.json` file. See the Cursor [documentation](https://docs.cursor.com/context/model-context-protocol) to learn more. ```json theme={null} { "mcpServers": { "chift": { "url": "https://mcp.chift.eu/mcp" } } } ``` Cursor connects to the hosted server directly and runs the OAuth flow in your browser on first use. To use a [legacy token](#authentication) instead, add a `headers` object with `Authorization: Bearer `. [Install in VS Code](https://vscode.dev/redirect/mcp/install?name=chift\&config=%7B%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.chift.eu%2Fmcp%22%7D) Click install to open VS Code and add the Chift MCP automatically, or add the following to your `.vscode/mcp.json` file. See the VS Code [documentation](https://code.visualstudio.com/docs/copilot/chat/mcp-servers) to learn more. ```json theme={null} { "servers": { "chift": { "type": "http", "url": "https://mcp.chift.eu/mcp" } } } ``` VS Code connects to the hosted server directly and runs the OAuth flow in your browser on first use. To use a [legacy token](#authentication) instead, add a `headers` object with `Authorization: Bearer `. Claude Code connects to the hosted server directly. Run the following command, and it runs the OAuth flow in your browser on first use. See the Claude Code [documentation](https://docs.anthropic.com/en/docs/claude-code/mcp#configure-mcp-servers) to learn more. ```bash theme={null} claude mcp add --transport http chift https://mcp.chift.eu/mcp ``` To use a [legacy token](#authentication) instead, add `--header "Authorization: Bearer "` to the command. ### Using with AI frameworks You can integrate the remote server with popular AI frameworks to build applications on top of Chift's Unified API. ```typescript theme={null} import { createMCPClient } from "@ai-sdk/mcp"; import { generateText } from "ai"; import { openai } from "@ai-sdk/openai"; async function getTools() { const response = await fetch("https://api.chift.eu/mcp-token", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ clientId: "your_client_id", clientSecret: "your_client_secret", accountId: "your_account_id", consumerId: "your_consumer_id", }), }); const { access_token } = await response.json(); const mcpClient = createMCPClient({ transport: { type: "http", url: "https://mcp.chift.eu/mcp", headers: { Authorization: `Bearer ${access_token}`, }, }, }); return await mcpClient.listTools(); } const result = await generateText({ model: openai("gpt-4"), tools: await getTools(), prompt: "List all accounting connections for my consumer", }); ``` ```python theme={null} import httpx from pydantic_ai import Agent from pydantic_ai.mcp import MCPServerStreamableHTTP async def get_tools(): async with httpx.AsyncClient() as client: response = await client.post( "https://api.chift.eu/mcp-token", json={ "clientId": "your_client_id", "clientSecret": "your_client_secret", "accountId": "your_account_id", "consumerId": "your_consumer_id", }, ) data = response.json() access_token = data["access_token"] return MCPServerStreamableHTTP( "https://mcp.chift.eu/mcp", headers={"Authorization": f"Bearer {access_token}"} ) async def main(): tools = await get_tools() agent = Agent("openai:gpt-4", toolsets=[tools]) result = await agent.run("Give me my orders of yesterday") print(result.output) if __name__ == "__main__": import asyncio asyncio.run(main()) ``` ```python theme={null} import httpx from langchain_mcp_adapters.client import MultiServerMCPClient from langchain.agents import create_agent from langchain_openai import ChatOpenAI async def get_tools(): async with httpx.AsyncClient() as client: response = await client.post( "https://api.chift.eu/mcp-token", json={ "clientId": "your_client_id", "clientSecret": "your_client_secret", "accountId": "your_account_id", "consumerId": "your_consumer_id", }, ) data = response.json() access_token = data["access_token"] client = MultiServerMCPClient({ "chift": { "url": "https://mcp.chift.eu/mcp", "transport": "streamable_http", "headers": { "Authorization": f"Bearer {access_token}" } } }) tools = await client.get_tools() return tools async def main(): tools = await get_tools() llm = ChatOpenAI(model="gpt-4") agent = create_agent({ "model": llm, "tools": tools, }) result = agent.invoke({ "messages": [("user", "List all accounting connections")] }) print(result) if __name__ == "__main__": import asyncio asyncio.run(main()) ``` ```typescript theme={null} import { MultiServerMCPClient } from "@langchain/mcp-adapters"; import { ChatOpenAI } from "@langchain/openai"; import { createAgent } from "langchain/agents"; async function getTools() { const response = await fetch("https://api.chift.eu/mcp-token", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ clientId: "your_client_id", clientSecret: "your_client_secret", accountId: "your_account_id", consumerId: "your_consumer_id", }), }); const { access_token } = await response.json(); const client = new MultiServerMCPClient({ chift: { transport: "streamable_http", url: "https://mcp.chift.eu/mcp", headers: { Authorization: `Bearer ${access_token}`, }, }, }); return await client.getTools(); } async function main() { const tools = await getTools(); const llm = new ChatOpenAI({ model: "gpt-4", }); const agent = createAgent({ model: llm, tools: tools, }); const result = await agent.invoke({ messages: [["user", "List all accounting connections"]], }); console.log(result); } main(); ``` The AI framework examples use the legacy token method for simplicity. For production applications, we recommend implementing OAuth 2.0. ## Tools and scopes The remote server's tools mirror the [Unified API](/api-reference) one-to-one across accounting, banking, ecommerce, invoicing, payment, PMS, and POS. The tools available in a session depend on the **scopes** granted during authorization. You only see tools for the verticals and operations you were authorized for, and read-only scopes expose read operations only. See [Scopes](#scopes) for how they are defined. # Attach a document (PDF) Source: https://docs.chift.eu/api-reference/endpoints/accounting/attach-a-document-pdf post /consumers/{consumer_id}/accounting/invoices/pdf/{invoice_id} Attach a document (PDF) to the invoice entry # Create a financial entry Source: https://docs.chift.eu/api-reference/endpoints/accounting/create-a-financial-entry post /consumers/{consumer_id}/accounting/financial-entries Create a new financial entry (Bank or Cash operation) # Create an expense Source: https://docs.chift.eu/api-reference/endpoints/accounting/create-an-expense post /consumers/{consumer_id}/accounting/expenses Create a new employee expense # Create an invoice payment Source: https://docs.chift.eu/api-reference/endpoints/accounting/create-an-invoice-payment post /consumers/{consumer_id}/accounting/invoices/payments Create invoice payment # Create analytic account Source: https://docs.chift.eu/api-reference/endpoints/accounting/create-analytic-account post /consumers/{consumer_id}/accounting/analytic-accounts Create a new analytic account in the default analytic plan # Create analytic account (Multiple Analytic Plans) Source: https://docs.chift.eu/api-reference/endpoints/accounting/create-analytic-account-multiple-analytic-plans post /consumers/{consumer_id}/accounting/analytic-accounts/multi-analytic-plans/{analytic_plan} Create a new analytic account in a specific analytic plan # Create bank account Source: https://docs.chift.eu/api-reference/endpoints/accounting/create-bank-account post /consumers/{consumer_id}/accounting/bank-accounts Create a new bank account in the accounting system # Create bank transactions Source: https://docs.chift.eu/api-reference/endpoints/accounting/create-bank-transactions post /consumers/{consumer_id}/accounting/bank-transactions Create new bank transactions # Create client Source: https://docs.chift.eu/api-reference/endpoints/accounting/create-client post /consumers/{consumer_id}/accounting/clients Create a new client # Create journal Source: https://docs.chift.eu/api-reference/endpoints/accounting/create-journal post /consumers/{consumer_id}/accounting/journal Create a journal in the accounting system # Create Journal Entry Source: https://docs.chift.eu/api-reference/endpoints/accounting/create-journal-entry post /consumers/{consumer_id}/accounting/journal-entries Create a new Journal Entry in the accounting system # Create ledger account Source: https://docs.chift.eu/api-reference/endpoints/accounting/create-ledger-account post /consumers/{consumer_id}/accounting/accounts Create a new ledger account in the chart of accounts # Create sale/purchase entry Source: https://docs.chift.eu/api-reference/endpoints/accounting/create-salepurchase-entry post /consumers/{consumer_id}/accounting/invoices Create a new sale/purchase accounting entry # Create sale/purchase entry (Multiple plans) Source: https://docs.chift.eu/api-reference/endpoints/accounting/create-salepurchase-entry-multiple-plans post /consumers/{consumer_id}/accounting/invoices/multi-analytic-plans Create a new sale/purchase entry with multiple analytic plans in the accounting # Create supplier Source: https://docs.chift.eu/api-reference/endpoints/accounting/create-supplier post /consumers/{consumer_id}/accounting/suppliers Create a new supplier # Export entries in FEC format Source: https://docs.chift.eu/api-reference/endpoints/accounting/export-entries-in-fec-format get /consumers/{consumer_id}/accounting/export-fec Returns accounting entries according to the FEC format # Get analytic account Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-analytic-account get /consumers/{consumer_id}/accounting/analytic-accounts/{analytic_account_id} Returns one specific analytic account of the default analytic plan # Get analytic account (Multiple Analytic Plans) Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-analytic-account-multiple-analytic-plans get /consumers/{consumer_id}/accounting/analytic-accounts/{analytic_account_id}/multi-analytic-plans/{analytic_plan} Returns one specific analytic account of a specific analytic plan # Get analytic accounts Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-analytic-accounts get /consumers/{consumer_id}/accounting/analytic-accounts Returns all analytic accounts of the default analytic plan # Get analytic accounts (Multiple Analytic Plans) Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-analytic-accounts-multiple-analytic-plans get /consumers/{consumer_id}/accounting/analytic-accounts/multi-analytic-plans Returns all analytic accounts of all analytic plans # Get Analytic Plans Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-analytic-plans get /consumers/{consumer_id}/accounting/analytic-plans # Get attachments Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-attachments get /consumers/{consumer_id}/accounting/attachments Returns the file content of all attachments linked to an accounting entry (invoice or journal entry). Use this endpoint when an invoice or journal entry has attachments_info.status set to 'yes_to_request'. Pass type=invoice and document_id={invoice_id} for invoices, or type=entry and document_id={entry_id} for journal entries. Each returned item contains a base64-encoded string of the file content (id and base64_string fields). # Get bank accounts Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-bank-accounts get /consumers/{consumer_id}/accounting/bank-accounts Returns a list of bank accounts in the accounting system # Get Bookyears Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-bookyears get /consumers/{consumer_id}/accounting/bookyears # Get chart of accounts Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-chart-of-accounts get /consumers/{consumer_id}/accounting/chart-of-accounts Get all accounts in the chart of accounts # Get clients Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-clients get /consumers/{consumer_id}/accounting/clients Returns a list of accounting clients # Get clients/suppliers outstanding items Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-clientssuppliers-outstanding-items get /consumers/{consumer_id}/accounting/outstandings Returns a list of all clients/suppliers outstanding items # Get employees Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-employees get /consumers/{consumer_id}/accounting/employees Returns a list of the employees linked to the company # Get Folder Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-folder get /consumers/{consumer_id}/accounting/folders/{folder_id} # Get Folders Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-folders get /consumers/{consumer_id}/accounting/folders # Get invoices by type (sale/purchase entries) Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-invoices-by-type-salepurchase-entries get /consumers/{consumer_id}/accounting/invoices/type/{invoice_type} Returns a list of invoices by a specific type (=sale/purchase entries). Each line of the invoice will include the analytic account linked to default analytic plan. Optionally dates can be defined to retrieve invoice from a certain date to another date # Get invoices by type (sale/purchase entries - Multiple Analytic Plans) Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-invoices-by-type-salepurchase-entries--multiple-analytic-plans get /consumers/{consumer_id}/accounting/invoices/multi-analytic-plans/type/{invoice_type} Returns a list of invoices by a specific type (=sale/purchase entries) with invoice lines including multiple analytic plans. Optionally dates can be defined to retrieve invoice from a certain date to another date # Get journal entries Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-journal-entries get /consumers/{consumer_id}/accounting/journal/entries Returns a list of journal entries. Each item will include the analytic account linked to default analytic plan. Optionally, you can retrieve journal entries linked to a specific client/supplier using the partner_id parameter. When retrieving entries linked to a specific client/supplier, some journal items of an entry (e.g. a miscellaneous operation) could be excluding resulting in an unbalanced journal entry. # Get journal entries (Multiple Analytic Plans) Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-journal-entries-multiple-analytic-plans get /consumers/{consumer_id}/accounting/journal/entries/multi-analytic-plans Returns a list of journal entries with invoice items including multiple analytic plan.Optionally, you can retrieve journal entries linked to a specific client/supplier using the partner_id parameter. When retrieving entries linked to a specific client/supplier, some journal items of an entry (e.g. a miscellaneous operation) could be excluding resulting in an unbalanced journal entry. # Get journals Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-journals get /consumers/{consumer_id}/accounting/journals Get journals existing in the accounting system # Get one client Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-one-client get /consumers/{consumer_id}/accounting/clients/{client_id} Returns a specific accounting client # Get one invoice (sale/purchase entry) Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-one-invoice-salepurchase-entry get /consumers/{consumer_id}/accounting/invoices/{invoice_id} Returns a specific invoice (sale/purchase entry). Each line will include the analytic account linked to default analytic plan # Get one invoice (sale/purchase entry - Multiple Analytic Plans) Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-one-invoice-salepurchase-entry--multiple-analytic-plans get /consumers/{consumer_id}/accounting/invoices/multi-analytic-plans/{invoice_id} Returns a specific invoice (=sale/purchase entry) with invoice lines /oincluding multiple analytic plans # Get one journal entry Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-one-journal-entry get /consumers/{consumer_id}/accounting/journal/entries/{journal_entry_id} Returns a single journal entry by ID. # Get one supplier Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-one-supplier get /consumers/{consumer_id}/accounting/suppliers/{supplier_id} Returns one accounting supplier # Get payment methods Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-payment-methods get /consumers/{consumer_id}/accounting/payment-methods Get payment methods # Get payment terms Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-payment-terms get /consumers/{consumer_id}/accounting/payment-terms Get payment terms # Get suppliers Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-suppliers get /consumers/{consumer_id}/accounting/suppliers Returns a list of accounting suppliers # Get the balance of accounts Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-the-balance-of-accounts post /consumers/{consumer_id}/accounting/chart-of-accounts/balance Get the balance of accounts in the accounting plan (chart of accounts) between specific months # Get vat codes Source: https://docs.chift.eu/api-reference/endpoints/accounting/get-vat-codes get /consumers/{consumer_id}/accounting/vat-codes Get vat codes existing in the accounting system # Match entries Source: https://docs.chift.eu/api-reference/endpoints/accounting/match-entries post /consumers/{consumer_id}/accounting/matching Match existing entries in the accounting system # Update analytic account Source: https://docs.chift.eu/api-reference/endpoints/accounting/update-analytic-account patch /consumers/{consumer_id}/accounting/analytic-accounts/{analytic_account_id} Update one specific analytic account in the default analytic plan # Update analytic account (Multiple Analytic Plans) Source: https://docs.chift.eu/api-reference/endpoints/accounting/update-analytic-account-multiple-analytic-plans patch /consumers/{consumer_id}/accounting/analytic-accounts/{analytic_account_id}/multi-analytic-plans/{analytic_plan} Update one specific analytic account in a specific analytic plan # Update client Source: https://docs.chift.eu/api-reference/endpoints/accounting/update-client patch /consumers/{consumer_id}/accounting/clients/{client_id} Endpoint that gives the possibility to update an accounting client # Update one supplier Source: https://docs.chift.eu/api-reference/endpoints/accounting/update-one-supplier patch /consumers/{consumer_id}/accounting/suppliers/{supplier_id} Update an accounting supplier # Get aggregated list of account counterparts found in transactions Source: https://docs.chift.eu/api-reference/endpoints/banking/get-aggregated-list-of-account-counterparts-found-in-transactions get /consumers/{consumer_id}/banking/counterparts Returns the aggregated list of account counterpats found in transactions. Useful for categorisation. # Get list of banking accounts Source: https://docs.chift.eu/api-reference/endpoints/banking/get-list-of-banking-accounts get /consumers/{consumer_id}/banking/accounts Returns the list of banking accounts # Get list of financial institutions Source: https://docs.chift.eu/api-reference/endpoints/banking/get-list-of-financial-institutions get /consumers/{consumer_id}/banking/financial-institutions Returns the list of financial institutions the user consent access to # Get list of financial transactions Source: https://docs.chift.eu/api-reference/endpoints/banking/get-list-of-financial-transactions get /consumers/{consumer_id}/banking/transactions Returns the list of transactions of an account # Add new connection Source: https://docs.chift.eu/api-reference/endpoints/connections/add-new-connection post /consumers/{consumer_id}/connections Returns the url that can be used by your client to enable his integrations. # Delete one connection Source: https://docs.chift.eu/api-reference/endpoints/connections/delete-one-connection delete /consumers/{consumer_id}/connections/{connectionid} Endpoint that deletes one connection of a consumer in Chift # Get connections Source: https://docs.chift.eu/api-reference/endpoints/connections/get-connections get /consumers/{consumer_id}/connections Returns a list of the connections (active or inactive) linked to your consumer # Get transaction information Source: https://docs.chift.eu/api-reference/endpoints/connections/get-transaction-information get /consumers/{consumer_id}/connections/{connection_id}/transactions Returns transaction info by client_request_id # Update an existing connection Source: https://docs.chift.eu/api-reference/endpoints/connections/update-an-existing-connection patch /consumers/{consumer_id}/connections/{connectionid} Returns the url that can be used by your client to update the connection # Create new consumer Source: https://docs.chift.eu/api-reference/endpoints/consumers/create-new-consumer post /consumers Create a new consumer that will have the possibility to use the enabled integrations # Delete one consumer Source: https://docs.chift.eu/api-reference/endpoints/consumers/delete-one-consumer delete /consumers/{consumer_id} Endpoint that deletes one consumer in Chift # Get consumers Source: https://docs.chift.eu/api-reference/endpoints/consumers/get-consumers get /consumers Returns the list of consumers linked to your account. # Get execution data for a specific consumer and a specific datastore Source: https://docs.chift.eu/api-reference/endpoints/consumers/get-execution-data-for-a-specific-consumer-and-a-specific-datastore get /consumers/{consumer_id}/datastore/{datastoreid}/data Returns execution data related to a consumer and a datastore. Queryparams can be used to filter the restuls by datastore column or by executionid # Get executions information for one consumer/flow/sync Source: https://docs.chift.eu/api-reference/endpoints/consumers/get-executions-information-for-one-consumerflowsync get /consumers/{consumer_id}/syncs/{syncid}/flows/{flowid}/executions Returns executions information for one consumer/flow/sync # Get one consumer Source: https://docs.chift.eu/api-reference/endpoints/consumers/get-one-consumer get /consumers/{consumer_id} Returns the specified consumer # Get sync information for one consumer Source: https://docs.chift.eu/api-reference/endpoints/consumers/get-sync-information-for-one-consumer get /consumers/{consumer_id}/syncs/{syncid} Returns sync information (creation date, mapping) related to a specific consumer # Retrieve the url of a sync for a specific consumer Source: https://docs.chift.eu/api-reference/endpoints/consumers/retrieve-the-url-of-a-sync-for-a-specific-consumer post /consumers/{consumer_id}/syncs This route can be used to retrieve the url that can be shared with your clients to allow them to connect as specified in a sync # Update one consumer Source: https://docs.chift.eu/api-reference/endpoints/consumers/update-one-consumer patch /consumers/{consumer_id} Update one consumer in Chift # Disable the datalayer sync for a connection Source: https://docs.chift.eu/api-reference/endpoints/datalayer/disable-the-datalayer-sync-for-a-connection post /consumers/{consumer_id}/connections/{connection_id}/disable_datalayer Disables the datalayer sync for the consumer's connection so it stops refreshing. Requires the datalayer to be configured for the connection's vertical. # Enable the datalayer sync for a connection Source: https://docs.chift.eu/api-reference/endpoints/datalayer/enable-the-datalayer-sync-for-a-connection post /consumers/{consumer_id}/connections/{connection_id}/enable_datalayer Enables the datalayer sync for the consumer's connection so it refreshes on schedule. Requires the datalayer to be configured for the connection's vertical. # Refresh the datalayer sync for a connection Source: https://docs.chift.eu/api-reference/endpoints/datalayer/refresh-the-datalayer-sync-for-a-connection post /consumers/{consumer_id}/connections/{connection_id}/refresh_datalayer Triggers an on-demand execution of the datalayer sync for the consumer's connection. Requires the datalayer to be configured for the connection's vertical and the sync enabled. # Get list of datastores Source: https://docs.chift.eu/api-reference/endpoints/datastores/get-list-of-datastores get /datastores Returns a list of datastores (active and inactive) available for your account # Create an order Source: https://docs.chift.eu/api-reference/endpoints/ecommerce/create-an-order post /consumers/{consumer_id}/commerce/orders Create a new order # Get all countries Source: https://docs.chift.eu/api-reference/endpoints/ecommerce/get-all-countries get /consumers/{consumer_id}/commerce/countries Returns the list of all activated countries # Get all customers Source: https://docs.chift.eu/api-reference/endpoints/ecommerce/get-all-customers get /consumers/{consumer_id}/commerce/customers Returns a list of all the customers # Get all locations Source: https://docs.chift.eu/api-reference/endpoints/ecommerce/get-all-locations get /consumers/{consumer_id}/commerce/locations Returns a list of all locations # Get all orders Source: https://docs.chift.eu/api-reference/endpoints/ecommerce/get-all-orders get /consumers/{consumer_id}/commerce/orders Returns a list of all the orders # Get all payment methods Source: https://docs.chift.eu/api-reference/endpoints/ecommerce/get-all-payment-methods get /consumers/{consumer_id}/commerce/payment-methods Returns the list of the payment methods # Get all product categories Source: https://docs.chift.eu/api-reference/endpoints/ecommerce/get-all-product-categories get /consumers/{consumer_id}/commerce/product-categories Returns the list of the product categories # Get all products Source: https://docs.chift.eu/api-reference/endpoints/ecommerce/get-all-products get /consumers/{consumer_id}/commerce/products Returns a list of all the products # Get all tax rates Source: https://docs.chift.eu/api-reference/endpoints/ecommerce/get-all-tax-rates get /consumers/{consumer_id}/commerce/taxes Returns the list of all tax rates # Get one specific customer Source: https://docs.chift.eu/api-reference/endpoints/ecommerce/get-one-specific-customer get /consumers/{consumer_id}/commerce/customers/{customer_id} Returns a specific customer # Get one specific order Source: https://docs.chift.eu/api-reference/endpoints/ecommerce/get-one-specific-order get /consumers/{consumer_id}/commerce/orders/{order_id} Returns a specific order # Get one specific product Source: https://docs.chift.eu/api-reference/endpoints/ecommerce/get-one-specific-product get /consumers/{consumer_id}/commerce/products/{product_id} Returns a specific product # Get one specific product variant Source: https://docs.chift.eu/api-reference/endpoints/ecommerce/get-one-specific-product-variant get /consumers/{consumer_id}/commerce/variants/{variant_id} Returns a specific product variant # Update available quantity Source: https://docs.chift.eu/api-reference/endpoints/ecommerce/update-available-quantity post /consumers/{consumer_id}/commerce/variants/set_quantity/{variant_id} Update available quantity of a product variant in a specific location # Get access token Source: https://docs.chift.eu/api-reference/endpoints/general/get-access-token post /token This endpoint allows you to get an access token that can be used as a BEARER token to access the protected endpoints of this APIs. The token is valid for 30 minutes. You can refresh the token by requesting a new token. # Get list of integrations Source: https://docs.chift.eu/api-reference/endpoints/integrations/get-list-of-integrations get /integrations Returns a list of integrations (active and inactive) available for your account # Returns a logo/icon of an integration (as base64) Source: https://docs.chift.eu/api-reference/endpoints/integrations/returns-a-logoicon-of-an-integration-as-base64 get /integrations/{integrationid}/{image_type}.json # Create a contact Source: https://docs.chift.eu/api-reference/endpoints/invoicing/create-a-contact post /consumers/{consumer_id}/invoicing/contacts Create a new contact. # Create a product Source: https://docs.chift.eu/api-reference/endpoints/invoicing/create-a-product post /consumers/{consumer_id}/invoicing/products Create a new product. # Create an invoice Source: https://docs.chift.eu/api-reference/endpoints/invoicing/create-an-invoice post /consumers/{consumer_id}/invoicing/invoices Create a new invoice. # Retrieve all Bank Accounts Source: https://docs.chift.eu/api-reference/endpoints/invoicing/retrieve-all-bank-accounts get /consumers/{consumer_id}/invoicing/bank-accounts Returns the list of bank accounts # Retrieve all Bank Transactions Source: https://docs.chift.eu/api-reference/endpoints/invoicing/retrieve-all-bank-transactions get /consumers/{consumer_id}/invoicing/bank-transactions Returns the list of bank transactions # Retrieve all contacts Source: https://docs.chift.eu/api-reference/endpoints/invoicing/retrieve-all-contacts get /consumers/{consumer_id}/invoicing/contacts Returns a list of all the contacts. Optionally contact type can be defined to retrieve contact from a certain type. # Retrieve all invoices Source: https://docs.chift.eu/api-reference/endpoints/invoicing/retrieve-all-invoices get /consumers/{consumer_id}/invoicing/invoices Returns a list of invoices. Optionally invoice type and dates can be defined to retrieve invoices of a certain type from a certain date to another date # Retrieve all opportunities Source: https://docs.chift.eu/api-reference/endpoints/invoicing/retrieve-all-opportunities get /consumers/{consumer_id}/invoicing/opportunities Returns a list of all the opportunities # Retrieve all payment methods Source: https://docs.chift.eu/api-reference/endpoints/invoicing/retrieve-all-payment-methods get /consumers/{consumer_id}/invoicing/payment-methods Returns the list of payment methods # Retrieve all payments (invoicing) Source: https://docs.chift.eu/api-reference/endpoints/invoicing/retrieve-all-payments-invoicing get /consumers/{consumer_id}/invoicing/payments Returns a list of payments # Retrieve all products Source: https://docs.chift.eu/api-reference/endpoints/invoicing/retrieve-all-products get /consumers/{consumer_id}/invoicing/products Returns a list of all the products # Retrieve all taxes Source: https://docs.chift.eu/api-reference/endpoints/invoicing/retrieve-all-taxes get /consumers/{consumer_id}/invoicing/taxes Returns a list of all the taxes # Retrieve one contact Source: https://docs.chift.eu/api-reference/endpoints/invoicing/retrieve-one-contact get /consumers/{consumer_id}/invoicing/contacts/{contact_id} Returns a contact # Retrieve one invoice Source: https://docs.chift.eu/api-reference/endpoints/invoicing/retrieve-one-invoice get /consumers/{consumer_id}/invoicing/invoices/{invoice_id} Returns a invoice # Retrieve one opportunity Source: https://docs.chift.eu/api-reference/endpoints/invoicing/retrieve-one-opportunity get /consumers/{consumer_id}/invoicing/opportunities/{opportunity_id} Returns an opportunity # Retrieve one product Source: https://docs.chift.eu/api-reference/endpoints/invoicing/retrieve-one-product get /consumers/{consumer_id}/invoicing/products/{product_id} Returns a product # Retrieve one tax Source: https://docs.chift.eu/api-reference/endpoints/invoicing/retrieve-one-tax get /consumers/{consumer_id}/invoicing/taxes/{tax_id} Returns a tax # Upload a document (PDF) Source: https://docs.chift.eu/api-reference/endpoints/invoicing/upload-a-document-pdf post /consumers/{consumer_id}/invoicing/upload-document Upload a document (PDF) # Get details about one issue Source: https://docs.chift.eu/api-reference/endpoints/issues/get-details-about-one-issue get /issues/{issue_id} Returns one specific issue. This includes as well the list of events for this issue. # Get issues Source: https://docs.chift.eu/api-reference/endpoints/issues/get-issues get /issues Returns a list of the issues of your account. Filters can be used to query specific results. Filters can be combined and are inclusive. # Get issues by consumer id Source: https://docs.chift.eu/api-reference/endpoints/issues/get-issues-by-consumer-id get /consumers/{consumer_id}/issues Returns a list of the issues linked to specific consumer. Filters can be used to query specific results. Filters can be combined and are inclusive. # Get a payment Source: https://docs.chift.eu/api-reference/endpoints/payment/get-a-payment get /consumers/{consumer_id}/payment/payments/{payment_id} Returns a specific payment. # Retrieve all balances Source: https://docs.chift.eu/api-reference/endpoints/payment/retrieve-all-balances get /consumers/{consumer_id}/payment/balances Returns a list of balances. # Retrieve all payments Source: https://docs.chift.eu/api-reference/endpoints/payment/retrieve-all-payments get /consumers/{consumer_id}/payment/payments Returns a list of payments. # Retrieve all refunds Source: https://docs.chift.eu/api-reference/endpoints/payment/retrieve-all-refunds get /consumers/{consumer_id}/payment/refunds Returns a list of refunds. # Retrieve all transactions Source: https://docs.chift.eu/api-reference/endpoints/payment/retrieve-all-transactions get /consumers/{consumer_id}/payment/transactions Returns a list of transactions. Optionally transaction type and dates can be defined to retrieve transactions of a certain type from a certain date to another date # Create one customer Source: https://docs.chift.eu/api-reference/endpoints/point-of-sale/create-one-customer post /consumers/{consumer_id}/pos/customers Create a customer # Get accounting categories Source: https://docs.chift.eu/api-reference/endpoints/point-of-sale/get-accounting-categories get /consumers/{consumer_id}/pos/accounting-categories Returns a list of accounting categories. When not available for a specific POS, it will return the same values as the product categories. # Get closure info for a specific day Source: https://docs.chift.eu/api-reference/endpoints/point-of-sale/get-closure-info-for-a-specific-day get /consumers/{consumer_id}/pos/closures/{date} Returns whether the closure was already done for a specific day or not # Get customers Source: https://docs.chift.eu/api-reference/endpoints/point-of-sale/get-customers get /consumers/{consumer_id}/pos/customers Returns the list of customers # Get locations Source: https://docs.chift.eu/api-reference/endpoints/point-of-sale/get-locations get /consumers/{consumer_id}/pos/locations Returns a list of the locations # Get Modifiers Source: https://docs.chift.eu/api-reference/endpoints/point-of-sale/get-modifiers get /consumers/{consumer_id}/pos/modifiers Returns a list of the modifiers # Get objectives Source: https://docs.chift.eu/api-reference/endpoints/point-of-sale/get-objectives get /consumers/{consumer_id}/pos/objectives Return the total amount and the tax amount for a specific period # Get one customer Source: https://docs.chift.eu/api-reference/endpoints/point-of-sale/get-one-customer get /consumers/{consumer_id}/pos/customers/{customer_id} Returns a specific customer # Get one order Source: https://docs.chift.eu/api-reference/endpoints/point-of-sale/get-one-order get /consumers/{consumer_id}/pos/orders/{order_id} Returns a single order # Get orders Source: https://docs.chift.eu/api-reference/endpoints/point-of-sale/get-orders get /consumers/{consumer_id}/pos/orders Returns a list of the orders # Get payment methods (POS) Source: https://docs.chift.eu/api-reference/endpoints/point-of-sale/get-payment-methods-pos get /consumers/{consumer_id}/pos/payment-methods Returns the list of payment methods (POS) # Get payments Source: https://docs.chift.eu/api-reference/endpoints/point-of-sale/get-payments get /consumers/{consumer_id}/pos/payments Returns a list of payments # Get product categories Source: https://docs.chift.eu/api-reference/endpoints/point-of-sale/get-product-categories get /consumers/{consumer_id}/pos/product-categories Returns a list of product categories # Get products Source: https://docs.chift.eu/api-reference/endpoints/point-of-sale/get-products get /consumers/{consumer_id}/pos/products Returns a list of products # Get report for a specific date (E-reporting) Source: https://docs.chift.eu/api-reference/endpoints/point-of-sale/get-report-for-a-specific-date-e-reporting get /consumers/{consumer_id}/pos/report The endpoints returns the report for a specific date containing the required data for e-reporting # Get sales Source: https://docs.chift.eu/api-reference/endpoints/point-of-sale/get-sales get /consumers/{consumer_id}/pos/sales Returns the summary of the sales # Get tax rates (POS) Source: https://docs.chift.eu/api-reference/endpoints/point-of-sale/get-tax-rates-pos get /consumers/{consumer_id}/pos/tax-rates Returns a list of the tax rates # Update order Source: https://docs.chift.eu/api-reference/endpoints/point-of-sale/update-order patch /consumers/{consumer_id}/pos/orders/{order_id} Update one order # Get accounting categories (PMS) Source: https://docs.chift.eu/api-reference/endpoints/property-management-system/get-accounting-categories-pms get /consumers/{consumer_id}/pms/accounting-categories Returns a list of accounting categories. When not available for a specific PMS,it will return the same values as the product categories. # Get closure info for a specific day (PMS) Source: https://docs.chift.eu/api-reference/endpoints/property-management-system/get-closure-info-for-a-specific-day-pms get /consumers/{consumer_id}/pms/closures/{date} Returns whether the closure was already done for a specific day or not # Get customers (PMS) Source: https://docs.chift.eu/api-reference/endpoints/property-management-system/get-customers-pms get /consumers/{consumer_id}/pms/customers Returns a list of all the customers # Get invoices (PMS) Source: https://docs.chift.eu/api-reference/endpoints/property-management-system/get-invoices-pms get /consumers/{consumer_id}/pms/invoices Returns a list of the invoices # Get locations (PMS) Source: https://docs.chift.eu/api-reference/endpoints/property-management-system/get-locations-pms get /consumers/{consumer_id}/pms/locations Returns a list of the locations # Get orders (PMS) Source: https://docs.chift.eu/api-reference/endpoints/property-management-system/get-orders-pms get /consumers/{consumer_id}/pms/orders Returns a list of the orders # Get payment methods (PMS) Source: https://docs.chift.eu/api-reference/endpoints/property-management-system/get-payment-methods-pms get /consumers/{consumer_id}/pms/payment-methods Returns the list of payment methods # Get payments (PMS) Source: https://docs.chift.eu/api-reference/endpoints/property-management-system/get-payments-pms get /consumers/{consumer_id}/pms/payments Returns a list of payments # Get tax rates (PMS) Source: https://docs.chift.eu/api-reference/endpoints/property-management-system/get-tax-rates-pms get /consumers/{consumer_id}/pms/taxes Returns a list of the tax rates # Get the accounting transactions (PMS) Source: https://docs.chift.eu/api-reference/endpoints/property-management-system/get-the-accounting-transactions-pms get /consumers/{consumer_id}/pms/accounting-transactions Returns a list of the accounting transactions # Enable a flow for a specific consumer Source: https://docs.chift.eu/api-reference/endpoints/syncs/enable-a-flow-for-a-specific-consumer post /consumers/{consumer_id}/syncs/{syncid}/flows/{flowid}/enable Route that can be used to enable a flow for a specific consumer # Get execution start/end timestamp Source: https://docs.chift.eu/api-reference/endpoints/syncs/get-execution-startend-timestamp get /syncs/{syncid}/flows/{flowid}/executions/{executionid} Get execution start/end timestamp # Get executions for a sync Source: https://docs.chift.eu/api-reference/endpoints/syncs/get-executions-for-a-sync get /syncs/{syncid}/executions Returns all executions for a sync with pagination. Optionally filter by flow. # Get sync Source: https://docs.chift.eu/api-reference/endpoints/syncs/get-sync get /syncs/{syncid} Returns a sync by id # Get syncs Source: https://docs.chift.eu/api-reference/endpoints/syncs/get-syncs get /syncs Returns the syncs # Send a custom event for a specific flow Source: https://docs.chift.eu/api-reference/endpoints/syncs/send-a-custom-event-for-a-specific-flow post /syncs/{syncid}/flows/{flowid}/event Route that can be used to send a specific event for a flow # Update flow mappings for a specific consumer Source: https://docs.chift.eu/api-reference/endpoints/syncs/update-flow-mappings-for-a-specific-consumer patch /consumers/{consumer_id}/syncs/{syncid} Route that can be used to update the flow mappings for a specific consumer. It will replace the existing configuration with the provided one. # Update flow settings for a specific consumer Source: https://docs.chift.eu/api-reference/endpoints/syncs/update-flow-settings-for-a-specific-consumer patch /consumers/{consumer_id}/syncs/{syncid}/flows/{flowid} Route that can be used to update the flow configuration for a specific consumer. It will merge the new configuration with the existing one. # Add new webhook instance Source: https://docs.chift.eu/api-reference/endpoints/webhooks/add-new-webhook-instance post /webhooks Returns the created webhook instance # Delete one webhook Source: https://docs.chift.eu/api-reference/endpoints/webhooks/delete-one-webhook delete /webhooks/{webhookid} Endpoint that deletes one existing webhook # Get list of possible webhooks Source: https://docs.chift.eu/api-reference/endpoints/webhooks/get-list-of-possible-webhooks get /webhooks/list Returns a list of webhook that are available for your account # Get list of webhook instances Source: https://docs.chift.eu/api-reference/endpoints/webhooks/get-list-of-webhook-instances get /webhooks Returns a list of webhook instances (active/inactive) for your account # Get list of webhook logs for one webhook Source: https://docs.chift.eu/api-reference/endpoints/webhooks/get-list-of-webhook-logs-for-one-webhook get /webhooks/{webhookid}/logs Returns a list of webhook logs for one webhook for your account # Get one webhook instance Source: https://docs.chift.eu/api-reference/endpoints/webhooks/get-one-webhook-instance get /webhooks/{webhookid} Returns one webhook instance # Update one webhook Source: https://docs.chift.eu/api-reference/endpoints/webhooks/update-one-webhook patch /webhooks/{webhookid} Update one webhook in Chift # Overview Source: https://docs.chift.eu/api-reference/overview # Unified APIs This is the **raw API reference** — the full list of endpoints, parameters, and response schemas. If you're new to Chift, start with the [Developer guides](/developer-guides/how-it-works): they explain how Chift works and walk you through building an integration step by step. Come back here for endpoint-level detail. Explore what you can do with the Accounting API Explore what you can do with the Point of Sale API Explore what you can do with the eCommerce API Explore what you can do with the Invoicing API Explore what you can do with the Banking API Explore what you can do with the Payment API Explore what you can do with the Property Management System API # Local agents Source: https://docs.chift.eu/back-office/advanced/local-agent Local agents are used for on-premise connectors that cannot be accessed through the cloud. Chift has developed a local agent that can be run on on-premise connectors' servers and that will act as a proxy between your server and Chift's infrastructure making it possible to expose an API on top of those connectors.\ This is typically used for connectors like Winbooks, Sage 100, Sage 50, etc. ## How it works The local agent does not require any specific network configuration. It will connect to Chift's cloud infrastructure and it will not expose any port to the internet. ## Setting up a local agent Typically the process to set up a local agent is the following: 1. The consumer visits the public connection page of a connector and clicks on "Connect". 2. The consumer will have the possibility to download a zip file or send a link to this zip file to another person (useful when the installation needs to be done by a third-party) Setup local agent 3. At this moment the consumer will have a connection which is not yet operational. Local agent not operational 4. The consumer or their technical contact extracts the zip file and installs the `Setup.exe` file (alongside a settings.json file containing the information related to this specific connection). This will install a Windows service on the server on which the connector is running that will act as a bridge with Chift. 5. Once the service is installed, the connection will become green on the consumer's dashboard and you will be able to execute requests. 6. At any time, you can see the status of the local agent and its latest heartbeat. You can also configure webhooks to be notified of the local agent's status. For every connector, you will find specific documentation in the connector's documentation and as well in the end-user connector's documentation to ease the process of installation. ## Monitoring a local agent Through the Chift dashboard, you can see the status of the local agent and its latest heartbeat (sent every 15-20 minutes).\ On a consumer's page, you will see whether the agent is: * Online and operational: green * Offline: orange (it's installed but not running currently) * Offline: red (the service is not installed) Because a local agent might be down, we recommend using a retry mechanism or implementing webhooks. ## Cockpit The **Chift Cockpit** can be used to configure your connections running on an on-premise server (or computer). You can find more information on how it works [here](https://help.chift.app/articles/4765527643-local-agent-cockpit-user-guide?lang=en) Setup cockpit # Webhooks Source: https://docs.chift.eu/back-office/advanced/webhooks Webhooks let you receive real-time notifications when specific events occur in your Chift account.\ You can use them to build fully embedded workflows and keep your systems in sync with changes happening in Chift. See this [guide](/api-reference/endpoints/webhooks) for more information about how webhooks work. This guide only covers how to create and manage webhooks in the Chift platform. ## Create a webhook 1. Go to the [webhooks page](https://chift.app/webhooks). 2. Click "Add webhook". 3. Fill in the required fields: * **Webhook URL**: The URL the webhook is sent to. * **Webhook type**: The type of webhook you want to create. See the [guide](/api-reference/endpoints/webhooks/get-list-of-possible-webhooks) for more information. * **Webhook signing secret**: The secret used to verify the authenticity of the webhook. This is optional. See the [guide](/api-reference/endpoints/webhooks/) for more information. 4. Click "Save". Create webhook ## Manage webhooks 1. Go to the [webhooks page](https://chift.app/webhooks). 2. Open a webhook from the list. 3. View the details of the webhook and edit or delete it. 4. In the section below, you can see the recent webhook requests and their status. Webhooks # Activate connector Source: https://docs.chift.eu/back-office/getting-started/activate-connector To enable integrations for your consumers, you first need to activate the connectors you want to use. This guide will walk you through the connector activation process. ## Access the connectors page 1. Log in to your Chift account 2. Navigate to the [Connectors page](https://chift.app/connectors) on the environment you want to activate the connector for 3. You'll see a list of all available connectors organized by category (Accounting, eCommerce, POS, etc.) Connectors Specific connectors might not be available for your account. Please contact your customer success manager if you need help. ## Activate a connector 1. Find the connector you want to activate in the list 2. Click on "View connector" to open its details 3. At the top of the connector page, you’ll see a “View documentation” link. It opens a separate page with detailed instructions and context about the connector. We recommend checking it before continuing configuration. 4. On the same page, you’ll also find the following configuration sections: | Section | Description | | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | General | Choose whether you want your end-user to enter a name for the connection. This is a free field that can help you and your end-user to identify the connection. This is optional.

You can also provide a **Help URL**, which will be shown to the end-user when activating the connector. If you leave it empty, we will display Chift’s default documentation for the connector. | | Preconfigure fields | Some fields can (and must) be configured at connector level. Typically those fields are partner specific and must not be entered by the end-user. | | Oauth2 | If the connector uses OAuth2, you will have to preconfigure the client id and client secret. We connect through your app to let end-users authorize your app to access their data. | | Post-connection configuration | Post-connection configuration can be used to let the end-user select some options after authentication. For example, this is helpful to let the end-user select the accounting folder or location they want to connect. Some post-connections are mandatory. Some are optional and activation might depend on your implementation and what you want to offload to Chift. When post-connections are used, data is automatically filtered based on the selection of the end-user. | 5. Click the "Activate" button to enable the connector


Example of an OAuth2 connector: Activate Connector - Oauth2 Example of a connector with partner key and post-connection: Activate Connector - Partner key & post-connection Connectors need to be activated separately for each environment you're working in (Sandbox, Production). This allows you to test integrations in a sandbox environment before deploying to production. ## Managing active connectors * You can view all your activated connectors through the "Show Active" filter * You can search for a connector by name or filter by Unified API * To deactivate a connector, you can use the toggle button on the connector card. Note that you can only deactivate connectors that are not currently connected to any consumer. ## Next steps Once you've activated your desired connectors, you can: * [Create consumers](/back-office/getting-started/create-consumer) who will use these connectors * [Generate API keys](/back-office/getting-started/create-api-key) to access the APIs * Start building integrations using our [API documentation](/api-reference) Make sure to activate connectors as well in your production environment when you are ready to go live. Your credentials for the production environment might be different from your sandbox credentials. # API Explorer Source: https://docs.chift.eu/back-office/getting-started/api-explorer The API Explorer is a powerful tool built into the platform that allows you to test and validate Chift's API endpoints directly from your browser. You can also use it to replay existing transactions, making it an essential tool for debugging and development. ## Accessing the API Explorer The API Explorer can be accessed in two ways: ### 1. From the sidebar Click the **API Explorer** button at the bottom of the sidebar. This opens the API Explorer without any pre-filled context — you will need to select an operation, consumer, and connection manually. ### 2. From a consumer's page Navigate to a consumer and click the **API Explorer** button in the top right corner of the page. When opened this way, the **consumer** and **connection** are automatically pre-filled based on the current consumer, so you can start testing right away. In both cases, the API Explorer opens as a drawer panel on the right side of the screen. ## Selecting and executing a request 1. Click **+ New request** to create a new request tab 2. Use the **operation selector** to select the endpoint you want to test — operations are grouped by tags and displayed with their HTTP method and summary. You can search by operation name, path, or tag. Once an operation is selected, a **"Learn more about this API endpoint"** link is displayed below, opening the corresponding API documentation in a new tab. 3. Select the **consumer** and **connection** to use. The available operations and consumers are filtered dynamically: * When a **consumer** is selected, only operations matching the consumer's connected APIs are shown * When an **operation** is selected, only consumers that support this API are listed * The **connection dropdown** adapts based on available connections: * If only one connection matches the endpoint, it is **auto-selected** and the dropdown is grayed out * If multiple connections of the same type are available, the dropdown is **active** and lets you switch between connectors 4. You can optionally enable the **Include raw data** option. When enabled, the raw response from the target connector will be included, allowing you to compare it directly with the processed data. This option is only available for GET endpoints. 5. Fill in the required **parameters** in the **Params** tab, and provide the **request's body** in the **Body** tab when applicable (a sample body is auto-populated from the API schema when available) 6. Click **Send** to execute the request (or use the keyboard shortcut **Cmd+Enter** on Mac / **Ctrl+Enter** on Windows) The response is displayed in the **Response** panel with the status code, execution duration, and the full JSON response body with syntax highlighting. You can **download** or **copy** the response, and toggle **fullscreen** mode for easier inspection. Executing POST, PUT, PATCH, or DELETE requests in production will actually modify data. Therefore, we strongly recommend testing POST, PUT, PATCH, and DELETE requests only in the sandbox environment. ## Multi-tab support You can open multiple request tabs simultaneously, allowing you to work on different endpoints or compare responses side by side. Each tab displays the HTTP method and operation name, and can be closed individually. Tabs persist across sessions so you can pick up right where you left off. Use the **+** button to add new tabs, **Clear tabs** to close all tabs at once, and the resize icons to switch between compact, default, and fullscreen modes. ## Request history Every executed request is automatically saved in the **History** sidebar on the right side of the API Explorer. Each entry includes: * HTTP method and path * Status code * Consumer and connection name * Environment (Sandbox / Production) * Timestamp Click on any history item to re-open it in a new tab with all parameters pre-filled. You can also delete individual entries or clear the entire history using the trash icon. History is scoped per account and persists across browser sessions (up to 200 entries). ### Filtering history Click the **filter icon** in the History header to reveal the filter panel. You can combine multiple filters to quickly find past requests: * **Search bar** — Search by operation name, path, consumer name, or connection name * **Consumer filter** — Click the user icon to filter by a specific consumer * **HTTP method** — Toggle one or more method badges: GET, POST, PUT, PATCH, DELETE * **Status category** — Toggle one or more status badges: 2XX (success), 4XX (client error), 5XX (server error) ## Replaying transactions You can replay any transaction directly from the transaction detail view: 1. Navigate to the **Transactions** section 2. Click on the transaction you want to inspect 3. Review the request details (method, path, parameters, headers) 4. Click **Open in Explorer** to load the transaction in the API Explorer with all parameters pre-filled 5. Modify any parameters if needed, then click **Send** When replaying a transaction, any connector-specific query parameters that are not part of the standard API specification are displayed in a read-only info box for reference. ## Raw data You can optionally enable the **Include raw data** option on GET endpoints. When enabled, the raw response from the target connector will be included alongside the unified Chift response, allowing you to compare it directly with the processed data. This is useful for debugging or when you need to access connector-specific fields not included in the unified model. On production environments, the raw data option is only available for accounts with the raw data premium feature enabled. ## Drawer sizing The API Explorer drawer can be resized to fit your workflow: * **Compact** — minimal overlay for quick checks * **Default (80%)** — standard working size * **Fullscreen** — full browser width for detailed inspection Your size preference is saved and restored automatically. ## Permissions Access to the API Explorer depends on your role: | Role | GET requests | POST, PUT, PATCH, DELETE requests | | -------------- | :-------------------: | :-------------------------------: | | **Admin** | | | | **Developer** | | | | **Onboarding** | | | | **Support** | | | | **Reporter** | | | **Admin** and **Developer** roles have full access to all HTTP methods. **Onboarding**, **Support**, and **Reporter** roles can only execute GET requests — write operations (POST, PUT, PATCH, DELETE) are not available. Contact your account administrator if you need elevated access. # Configure account Source: https://docs.chift.eu/back-office/getting-started/configure-account Setting up your Chift account is the first step to leveraging our unified APIs and building powerful integrations. This guide will walk you through the initial configuration process. It will help you to: * Set up your personal information and language * Invite team members * Configure the public pages of your organization * Configure automatic email reminders (See [Email Reminders](/back-office/user-onboarding/email-reminders)) To start, you will need to enter the "Settings" [menu](https://chift.app/settings).\ As a new user, you can as well follow our "Getting Started" onboarding in the sidebar. ## Set up your personal information and language In this section you can set up your personal information and default language. Next to that you can as well update your password if required. Settings ## Add team members You can invite team members to collaborate on your Chift account: 1. Go to the 'Members' section 2. Click "Add user" 3. Enter their email address and assign appropriate roles (see [Roles](/back-office/platform/roles)) 4. They will receive an invitation email to join your organization Next to that you can also manage your team members and their roles. Members ## Configure the public pages of your organization In this section you can configure the branding of your organization on Chift's public pages. Public Pages You can set up the logo, the main color and the button color.\ E.g. for the example above, the configuration will look like this for the activation of Hiboutik: Example By using your colors and your logo, you can make sure that your customers feel at home when they visit your public pages. You can as well select the default language of those public pages. ## Connection name configuration When creating a connection in Chift, you can assign a **connection name**. This name is purely a label, but it becomes essential as soon as a user manages multiple connections, or when you need to clearly associate a connection with a specific client or end user. The connection name can be: * **Defined directly via the API** when creating the connection, or * **Entered by the end user** during the connection activation flow, as shown in the example below. If you already handle connection naming on your side, or if you simply don’t need this information, you can disable the connection name prompt entirely. This can be done globally, for all users and all connectors, from your **consumer page configuration** by setting the corresponding option to **“Never”**: Connection Name Deactivation Once disabled, users will no longer be asked to provide a connection name during activation (see example below). Connection Name Example Deact This setting can also be overridden per **connector** from the connector configuration page. ## Default redirection URL You can configure a default redirection URL for each environment.\ This URL will be used to redirect the customer to a specific page after they have completed the connection process. Default Redirection URL ## Redirect URL parameters You can choose to automatically append connection details to the redirect URL used after a successful connection. This makes it easier to track, identify, and handle user flows on your side. image.png When this option is enabled, additional query parameters will be appended to the consumer redirect URL based on the connection outcome: * **consumerId** – The identifier of the consumer. * **connectionId** – The identifier of the newly created or updated connection. * **connectionStatus** – Indicates whether the connection is `active` or `inactive`. In case of an error during the connection process, the following parameters will also be included: * **error** – A short error code describing the issue. * **isExpiredError** – A boolean flag indicating if the error is due to an expired invitation or session. ## Restrict connection creation via UI You can enable a setting to **restrict consumers from creating connections through the UI** (e.g. marketplace). image.png \ When activated, consumers can only create connections via the **API**. * The consumer link page will display a message explaining that connections cannot be created there. * The valid flow is: 1. Create the consumer via API 2. Create the connection via API (with `integrationId` and `name`) 3. Redirect the customer to the generated activation URL This configuration ensures that all connections are created and tracked via API, preventing accidental or uncontrolled connections from being created through the UI. ## Next steps Once your account is configured, you can: * [Activate connectors](/back-office/getting-started/activate-connector) for your integrations * [Set up consumers](/back-office/getting-started/create-consumer) for your applications * [Create API keys](/back-office/getting-started/create-api-key) to access our APIs * Explore our [API documentation](/api-reference) to start building For any questions during the setup process, don't hesitate to contact our support team at [support@chift.eu](mailto:support@chift.eu) # Create and manage API keys Source: https://docs.chift.eu/back-office/getting-started/create-api-key API keys are your main authentication method when interacting with the Chift Unified API.\ Each key identifies and authorizes requests made from your account. You can manage them directly from the [API Keys page](https://chift.app/api-keys) in the platform. *** API Keys Page ## Managing your keys From the **API Keys** page, you can: * View all existing API keys * Delete unused or expired keys * Create new ones when rotating credentials or switching environments Rotate your API keys regularly. You can also optionally **limit the scope** of an API key to one or more consumers. *** ## Consumer-specific API keys When creating a new key, you can restrict its access to a specific consumer: 1. Select a consumer from the dropdown menu. 2. The key only accesses this consumer's data. 3. This adds an extra layer of isolation and security. It is especially useful for customer-specific integrations, but is not relevant in most implementations. *** For a deeper overview of how authentication works with the Unified API, see the [Authentication guide](/developer-guides/chift-authentication). # Create consumer Source: https://docs.chift.eu/back-office/getting-started/create-consumer A consumer represents an end-user or organization that will connect to third-party services (or connectors) through Chift's Unified APIs.\ This guide explains how to create and manage consumers in your Chift account. ## What is a consumer? A consumer is an entity (typically one of your customers) that will use the connectors you've activated to integrate with various services.\ Each consumer can have multiple connections to different services (accounting, pos, ecommerce, invoicing, ...). Each consumer is represented by a `GUID` and by a `name`. An internal reference can as well be added (Feature available upon request). ## Creating a consumer 1. Navigate to the [Consumers page](https://chift.app/consumers). 2. Click the "Add consumer" button. 3. Fill in the required information: * **Name**: An identifier for the consumer (free text, up to you to choose if you want to use a GUID or something more readable). * **Redirection URL** (optional): The URL to redirect the consumer to after authentication. * **Email** (optional): Contact email for the consumer. If filled in, this email is used to send reminders and notifications (if activated in the account settings: [Email Reminders](/back-office/user-onboarding/email-reminders)). 4. Click "Save" to create. 5. Once created, you can copy the connection URL or navigate directly to the consumer's connection page. Create Consumer In production, you will typically create a consumer through the API. ## Activation of a connection Connections make the link between consumers and software. Each consumer can have multiple connections. A connection is represented by a `name`, a `link to a specific software` and `link to a specific Chift API`. A connection will for example represent the credentials to connect to an Odoo instance for a specific consumer. 1. Navigate to the [Consumers page](https://chift.app/consumers). 2. Click the three dots on the right of the consumer you want to activate a connection for and select "Get consumer link". 3. Navigate to the connection page, select the connector you want to connect to, and click "Connect". In production, you typically skip this page and let your users navigate directly to the connection page of connectors. 4. Fill in the required information and click "Connect" to initiate the connection. 5. If successful, you are redirected to the consumer's redirection URL or back to the marketplace. In production, you typically activate a connection through the API. You can retrieve the connection URL for a consumer and share it with them. ## Managing consumers Once created, you can: * View all your consumers in the consumers list * Search for specific consumers using the global search bar * Export the list of consumers to a CSV file * Filter consumers based on their status or connections * Edit consumer details by clicking on a consumer in the list ## Next steps After creating a consumer and activating a connection, you can: * Use the [API Explorer](/back-office/getting-started/api-explorer) to test the APIs * [Create API keys](/back-office/getting-started/create-api-key) to access our APIs * Use our [API endpoints](/api-reference) to manage consumer data * Monitor consumer activities and connection status # Configure MCP Source: https://docs.chift.eu/back-office/platform/mcp The [Model Context Protocol (MCP)](/ai/mcp) lets AI agents and assistants (Claude, Cursor, ChatGPT, custom agents, …) connect to Chift's unified APIs on behalf of your consumers. The [remote MCP server](/ai/mcp/remote) grants that access through OAuth 2.0, so before anyone can connect a client you first need to enable MCP and choose which scopes your end users are allowed to authorize. Open the **MCP** page from the left sidebar. These settings are managed **per environment**, so use the environment selector to switch between your sandbox and production environments before configuring them. MCP page To configure and activate MCP: 1. **Enable MCP** – toggle the switch on to turn on OAuth 2.0 access for the selected environment. This allows third-party applications to request consumer-scoped access. 2. **Pick the allowed scopes** – under **Allowed scopes**, tick the verticals your end users are allowed to authorize. Expand a vertical to select individual entities, or tick **Read only** to restrict a vertical to read access. End users will only ever be able to grant the scopes you tick here. 3. **Save** – click **Save** to apply your scope selection. MCP settings Once MCP is active, your end users authorize access from their MCP client: they log in, pick a consumer, and choose from the scopes you allowed. See the [remote MCP server](/ai/mcp/remote) guide for how developers connect a client, or the [MCP overview](/ai/mcp) to learn how the server works. # Support for multiple environments Source: https://docs.chift.eu/back-office/platform/multi-environment By default, we support one sandbox and one production environment allowing you to separate your consumers used for development and testing with your production’s consumers. To match all needs of our customers, we have as well the possibility to add sub-environments under Production and Sandbox allowing to work with as many environments as you want.\ This can be really helpful for use cases such as: * Manage connectors’ credentials in multiple environments * Match your app’s environments with Chift’s environments (Local, Test, QA, …) and separate your access keys for each of those environments * Environment-based reporting * … Multi-environment This feature is available upon request only # Roles Source: https://docs.chift.eu/back-office/platform/roles This document describes the different roles that you can assign to your users on Chift's platform. Based on user feedback, we have created a set of roles with a set of permissions so that you can easily give the right roles to the right team members. Don't hesitate to contact us if it doesn't match your expectations. ### Roles' description The table below highlights the different roles with a brief explanation. | Role | Description | | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | Admin | Can manage the account, invite new members, and manage accesses. Can also do everything on the platform. | | Developer | Same as admin but cannot manage members. | | Onboarding | Can create, update, and send connection links of consumers. Also has the same rights as the support role. | | Support | Same as reporter, and can also view datastore data, transactions, and execute GET transactions through the API Explorer. | | Reporter | Can only view data of consumers, connectors, and syncs. Cannot view transactions or datastore data, and cannot manage the account or invite new members. | ### Roles' permissions matrix The table below gives a detailed overview of the permissions assigned to each role. | Permission | Admin | Developer | Onboarding | Support | Reporter | | ------------------------------------- | --------------------- | --------------------- | --------------------- | --------------------- | --------------------- | | Create consumers | | | | | | | Read consumers | | | | | | | Update consumers | | | | | | | Delete consumers | | | | | | | Setup new connections (generate link) | | | | | | | Create API keys | | | | | | | Read API keys | | | | | | | Update API keys | | | | | | | Delete API keys | | | | | | | Activate/Deactivate connectors | | | | | | | Read connectors | | | | | | | Create webhooks | | | | | | | Read webhooks | | | | | | | Update webhooks | | | | | | | Delete webhooks | | | | | | | Create syncs | | | | | | | Read syncs | | | | | | | Update syncs | | | | | | | Delete syncs | | | | | | | Execute GET transactions | | | | | | | Execute ALL transactions | | | | | | | Read transactions | | | | | | | Read datastores | | | | | | | Delete datastores | | | | | | | Execute flows | | | | | | | Update account (logo, colors, ...) | | | | | | | Manage members | | | | | | | Create marketplace | | | | | | | Update marketplace | | | | | | | Delete marketplace | | | | | | | Create environment | | | | | | | Update environment | | | | | | | Delete environment | | | | | | # How to contact Chift support Source: https://docs.chift.eu/back-office/support/contact-support For integration issues (a failing consumer, connection or API call), try [Chifty](/ai/chifty) first: it diagnoses the problem from your account data and tells you what to do, without waiting for support. If you need help, there are two ways to reach our support team: ## Platform bot (recommended) SCR 20251008 Mmti Pn The fastest and most efficient way to contact support is through the built-in messenger on the Chift platform.\ Using this method allows us to: * Instantly access the context of your account * Provide faster and more accurate responses With the messenger, you can: * Start a new conversation with our Support AI assistant — this will automatically create a ticket in our support platform * Access and follow up on existing conversations * Quickly open the support ticket portal #### How to use the messenger 1. Click on the chat icon in the bottom-right corner of any page on the platform. SCR 20251008 Mmoc Pn 2. Click **Start a new chat** and describe the issue you're experiencing, including as much context as possible. > 💡 **Important:** If you're reporting a bug, we strongly recommend starting the conversation **from the page of the consumer where the issue occurs**. This way, all relevant information from that consumer is automatically included in the ticket, which speeds up the investigation and resolution. 3. Once submitted, our support team will review your message and get back to you as soon as possible. ## Support form If you prefer to use a more structured form to create your support request, you can go to the [support portal](https://support.chift.app/form/support-request) to submit your ticket. From this [Ticket Portal](https://support.chift.app/), you will also be able to view and manage all your existing tickets. SCR 20251008 Mmtf Pn ## Email support You can also contact our support team by emailing [support@chift.eu](mailto:support@chift.eu). To help us resolve your issue faster, please include: * Your account name * A detailed description of the problem * The consumer(s) affected * Any relevant screenshots or error messages 👉 However, for the best experience and quickest resolution, we highly recommend using the **platform messenger**, as it provides more context about your account and usage. ## Next step: Manage your tickets 👉 Once your ticket is created, you can manage, track, and view all ticket details through our [Ticket Portal](/back-office/support/ticket-portal). # Managing tickets Source: https://docs.chift.eu/back-office/support/ticket-portal You can track and manage all support tickets across your consumers. There are two main views: ### A. Consumer-level tickets Tickets Consumer Pn Each consumer has a dedicated **Tickets** tab showing all tickets related to that specific consumer. This view helps you: * Quickly find tickets for that consumer * Track the status of open or resolved tickets * Follow up on ongoing issues > 💡 **Tip:** Reporting a bug from the consumer page ensures that relevant context is automatically included in the ticket, helping support resolve the issue faster. ### B. Full account view (Pylon) Tickets Pylon You can also directly access the ticketing platform ([Pylon](https://support.chift.app)) for a centralized overview of all tickets across your account. The full ticket portal allows you to: * View all tickets in one place * Filter tickets by **status** * Sort tickets by different criteria * Access detailed ticket history and communication This centralized system helps you and your team keep track of all support interactions, ensuring nothing gets lost and providing a clear audit trail of communications. # Email reminders Source: https://docs.chift.eu/back-office/user-onboarding/email-reminders Email reminders can be used to help you to remind your consumers to complete the activation process in an automated way. Two types of emails are available: * Consumer with inactive connection: sent to consumers that have no active connection * Consumer with incomplete sync: sent to consumers that have a sync but the connection or the mappings are not correctly set (only if you are using syncs) Consumer with inactive connection will only be sent if the consumer has no sync.\ Otherwise, consumer with incomplete sync will be used. Email reminders are only sent to consumers that have an email address.\ You can set up an email address for your consumers when you create them through the UI or the API.\ If your consumers are exposed through a public marketplace, they will always have an email address. ## Email settings You have the flexibility in how these emails are delivered to your consumers. Through the settings page, you can customize two key aspects: 1. Set when reminder emails should be sent by choosing an interval of 1, 3, or 5 days between each email. 2. Specify how many reminder emails a consumer should receive in total by selecting either None, one, two, or three reminders. Settings Next to each email type, an eye icon allows clients to preview the email content sent to consumers. The logo and colors used in these emails can be customized in the [“Consumer Page” tab](/back-office/getting-started/configure-account#configure-the-public-pages-of-your-organization). Preview of an email ## Email dispatch Every day at 6:00 UTC (7:00 Belgium time), our system runs a dispatch job that processes each type of email separately. Emails are sent from [`support@chift.eu`](mailto:support@chift.eu). We also create a consumer log entry when an email is dispatched, which appears in the corresponding consumer or sync log page. ## Email types ### Consumers with inactive connection For consumers without syncs, we check their connection status: * No Connection: Proceed with a generic reminder email. * Pending Connection: Proceed with a customized email that includes the connector name and a link to the connector help page. Once we've determined a consumer should receive an email, we check if the configured interval has passed since their last communication before dispatching either their first email or next reminder. Preview of an email without connection ### Consumer with incomplete sync For each consumer, we check their connection and mapping status. The consumer can be in the following statuses: * No connection * Pending connection * No mapping completed * Pending mapping * Missing configuration Each status appears in the email with its own message. If a documentation url is present for the sync for your users, it will display as a help link alongside the sync. Preview of an email for sync Transactional emails are only dispatched for the **production environment** of the client’s account.\ Consumers in the sandbox environment will not receive any transactional emails. ## Email logs The email logs show a chronological history of reminder emails sent to your consumers, whether dispatched automatically or sent manually. The page helps you track communication activity and measure how reminders influence activation. Preview of email logs At the top of the table, a summary section displays key metrics such as the number of consumers reminded, total emails sent, active consumers, inactive consumers, and the conversion rate. Each entry in the table corresponds to a specific email sent to a consumer. For every email, you can see when it was sent, what type of reminder it was, how many reminders the consumer has already received, and their current connection status at that time. # External invitations Source: https://docs.chift.eu/back-office/user-onboarding/external-invitation During an onboarding process, the person trying to connect a software is not always the same as the person who has access to the software. Moreover, when you are trying to connect multiple software, it might involve multiple people. External invitation can be used to invite external people to connect during the activation process of a consumer. This feature is available upon request only. Once this feature is enabled, your consumers will be able to invite external people to connect during the activation process of a consumer. ### For connections: 1. The consumer invites an external person through the "Invite user" button on the public connection page. 2. The consumer fills in the form with the external person's information and a message. Invite user 3. An email is sent to the external person with a temporary (valid for 7 days) and secure link to the connection page. Invitation email 4. The external person clicks the link and is redirected to the connection page. 5. The external person can then connect the software. 6. The connection is created and the consumer is notified (if the consumer has an email address). Through the connection logs, you will be able to see that the connection has been activated by an external person. ### For syncs (only if you are using syncs): 1. The consumer invites an external person through the "Invite user" button on the public sync page. 2. The consumer fills in the form with the external person's information and a message. Invite user The consumer can also choose to invite the external person to connect only to a specific connection of the sync so that they don't have access to other settings (e.g. useful for accountants who request access to their clients' software). 3. An email is sent to the external person with a temporary (valid for 7 days) and secure link to the sync page. 4. The process is then the same as for a connection. # Help center Source: https://docs.chift.eu/back-office/user-onboarding/help-center For each connector available on Chift, we maintain detailed help articles in our Pylon knowledge base to assist your consumers with: * Finding their credentials * Completing the connection process * Troubleshooting common issues These help articles are easily accessible directly from the connection pages. When your consumers are trying to connect, they'll see a help link that takes them to the relevant documentation for that specific connector. Help Link The help articles provide step-by-step instructions with screenshots to guide users through: * Where to find their credentials in the source system * Required permissions and settings * Common error messages and their solutions The help articles are regularly updated to reflect any changes in the connector interfaces or authentication processes. # Issues Source: https://docs.chift.eu/back-office/user-onboarding/issues Chift provides a comprehensive overview of the issues that might arise when trying to activate a consumer. This feature is available upon request only. ## List of issues This page gives you a list of all the issues found during the activation process for your consumers.\ The goal is to help you identify the root cause of the issue and to help you resolve it. Issues You have the option to get the consumer/sync link to give more details about the issue or to send directly an email to the consumer to help them troubleshoot the issue. You can as well open a ticket to get in touch with our support team (see [Contact Support](/back-office/support/contact-support)). You can filter the issues by issue type: * No connection (no connection process was initiated) * Connection error (error during the connection process) * Connection required (required connections are missing) * Sync mapping required (some mappings were not correctly set) * Sync not configured (the sync was not correctly configured and not activated) * Sync disabled (the sync was disabled by the consumer) ### AI suggested resolutions When you open an issue, you can use our smart AI chat to help you resolve the issue. AI Chat Based on our internal and external documentation, it will provide you with suggestions on how to help you resolve issues. You can then directly chat as well with the AI bot to provide more context if needed. ### Send email reminder Through the menu next to each consumer, you can choose to "Send email to a consumer". This allows you to send manually a reminder email to a consumer to activate a connection. Issues # Monitoring Source: https://docs.chift.eu/back-office/user-onboarding/monitoring Chift provides a comprehensive overview to help you track and manage your consumers' connections. This guide explains how to effectively monitor connection statuses and troubleshoot any issues that may arise. ## Overview of connections The main dashboard gives you a clear view of all your consumers' connections. It will give you an overview of the number of active consumers. A consumer is considered as active if there is at least one active connection. Connections Next to the number of active consumers, you will see the number of active connections. One consumer can have multiple connections. Pending connections are connections that were initiated but not finished. Failed connections are connections that failed to authenticate due to an authentication error (e.g. wrong credentials, permissions issues, ...). The rest of the page will give you an overview of the connectors used by your clients. Charts of connections You can drill down to see more details about each Unified API or connector. ## Overview of syncs Only when you are using syncs. If you are using Chift's syncs, this overview will give you an overview of the active syncs of your consumers.\ An active connection does not mean the sync is activated.\ The most important metric for you to track is the number of active syncs. A sync is considered as active for one consumer if the configuration was successfully completed. Syncs The rest of the page will give you an overview of the activation rate of your syncs. Syncs - activation You can drill down to see more details about each step of the sync and where it might have failed. ## List of consumers (by connections) Navigate to the [Consumers page](https://chift.app/consumers) and you will see a list of all your consumers. Consumers You have filters to select the active consumers or to filter by specific connectors. At any time you can search for a specific consumer by name or by `consumer_id` by using the global search bar. You can download the list of consumers visible on your screen by clicking on the 'Download CSV' button. In the issue column, you will see what might have failed for a consumer: * Connection failed (name of connector) * Nothing: no connection process was initiated Click on the three dots and click on "Get consumer link" to get a link to the consumer's connection page. This can give you more details about what might have failed. Through the three dots, you can also edit or delete the consumer. ## List of consumers (by syncs) Only when you are using syncs. Navigate to the [Consumers page](https://chift.app/consumers), select the "By syncs" tab and you will see a list of all the consumers for which you tried to activate a sync. Consumers - syncs Different filters are available to help you identify the consumers that failed to activate a sync (e.g. by sync, by connector, ...) In the issue column, you will see what might have failed during the sync activation for a consumer: * Connection failed (name of connector) * No connection: required connections are missing * Mapping incomplete: some mappings were not correctly set * Configuration incomplete: the configuration was not completed and the sync was not activated Click on the three dots and click on "Get sync link" to get a link to the consumer's connection page for the sync. This can give you more details about what might have failed. Through the three dots, you can also edit or delete the consumer. ## Next steps * Learn about [Issues management](/back-office/user-onboarding/issues) * Set up [Email reminders](/back-office/user-onboarding/email-reminders) * Explore the [Help center](/back-office/user-onboarding/help-center) for troubleshooting guides # Overview Source: https://docs.chift.eu/back-office/user-onboarding/overview Chift is built based on the belief that the onboarding experience is a crucial part of the integration process. We developed a set of tools to help you onboard your users and manage their activations. Here's what you'll find in the following pages: ## Monitoring Learn how to track and monitor your consumers' connections. This includes viewing connection statuses, filtering by connector, and identifying potential issues early. ## Issues management In this section, you'll find a list of issues found during the activation process. This feature is available upon request only. ## Help center for end-users For each connector, you'll find a help center that you can use to guide your consumers through the activation process. ## External invitation Discover how to invite external users to connect their software through Chift. This feature is available upon request only. ## Email reminders Explore how to set up and manage automated email reminders for your consumers. This helps ensure they complete necessary setup steps without you having to do it manually. This feature is available upon request only. These tools and features are designed to help you provide a smooth onboarding experience for your users while maintaining visibility and control over the integration process. # Product & connector updates - January, 2025 Source: https://docs.chift.eu/changelogs/2025-01 ## Connectors ### Apitic We are expanding our POS API with Apitic.
Apitic is a POS application for restaurants.
### Odoo POS Next to accounting & invoicing, our Odoo connector now supports the POS vertical as well.
Take a look at [our documentation](/connectors/pos/odoo_pos) to see how to activate the connector. ## Product ### New login methods for our platform We are moving away from the traditional email/password login method to support the following login methods: * Log in through Google * Log in with email (Magic link or OTP code) Moreover we support as well SSO to better match with the needs of our customers and prospects. ### New login methods for our public marketplaces For your end-users, we can as well offer now SSO capabilities to connect to your Chift's marketplace. This offers huge benefits: * Better user experience for end-user * Streamline roles and accesses * Automate account and consumer creation ### Email reminders Email reminders can be used to help you to remind your consumers to complete the activation process in an automated way. You can configure in your backoffice the intervals and type of reminders that you want to send.
You can as well preview the email or send the email manually if preferred through the [Issue panel](/back-office/user-onboarding/issues). # Product & connector updates - February, 2025 Source: https://docs.chift.eu/changelogs/2025-02 ## Product ### Internationalisation of syncs We now support the dynamic translations of syncs.
Every label can be customized on our UI to tailor the pages to the language of your end-users. # Product & connector updates - March, 2025 Source: https://docs.chift.eu/changelogs/2025-03 ## Connectors ### Accounting Updated coverage for "Create journal": * Pennylane * Exact Online * Cegid Loop * Inqom * Octopus * Horus * ACD * Minox * Odoo Updated coverage for "Create ledger account": * Pennylane * Exact Online * Cegid Loop * Inqom * Octopus * Horus * ACD * Minox * Odoo * Fullscope ### New connector Leo2 We are expanding our POS API with Leo2.
Leo2 is a modern, touch-screen POS (point of sale) for shops and restaurants
### New connector Tactilpad We are expanding our POS API with Tactilpad.
TactilPad offers 360° payment solutions with its high-performance cash register software, specially designed to meet the needs of businesses
### New connector Yuki We are expanding our Accounting API with Yuki.
Yuki is a cloud-based accounting software for small and medium-sized businesses.
# Product Updates - June, 2025 Source: https://docs.chift.eu/changelogs/2025-06 ## Product ### Unified consumer management We've streamlined the consumer management experience with several key improvements: **Simplified interface** * Removed the marketplace selector for a cleaner, more intuitive interface * All consumers (syncs, non-syncs, and marketplace consumers) are now displayed together in a single, unified table **Enhanced visibility** * Added visual badges to clearly distinguish marketplace consumers from regular consumers * Simplified table columns to focus on what matters most: consumer name, connected integrations, and status **Improved data management** * Enhanced filtering capabilities across all consumer types * Unified CSV export that includes all consumer data in one comprehensive file * Streamlined data structure for better performance and usability These changes make it easier to manage all your consumers from one central location while maintaining clear visibility into different consumer types. #### Before #### After ### Added new translations for "Spain" * Chift's backoffice is now available in Spanish. * Spanish connectors are now available with Spanish translations. # Product Updates - July, 2025 Source: https://docs.chift.eu/changelogs/2025-07 ## Product ### New issues management & AI-powered resolution We've introduced a comprehensive Issues management system to help you track and resolve consumer issues during API operations and sync executions. This new feature provides better visibility into your consumer's challenges and offers solutions to resolve them faster. #### Issue tracking in execution history Monitor issues as they occur during a sync execution with our new execution history view: * **Improved visibility**: See exactly when and where issues occur during sync operations * **Detailed event tracking**: Follow the complete timeline of events leading to an issue * **Status indicators**: Quickly identify all operations #### Comprehensive issues overview Get a bird's-eye view of all issues across your consumers with our new Issues dashboard: * **Unified issue tracking**: View all consumer issues in one centralized location * **Smart categorization**: Issues are automatically categorized by type and severity * **Analytics insights**: Track issue frequency and trends * **Advanced filtering**: Filter by consumer, connector, date range, and issue status #### Detailed issue investigation Dive deep into individual issues with comprehensive detail views: * **Root cause analysis**: Understand exactly what went wrong and why * **Contextual information**: See the full context surrounding the issue occurrence * **Error code mapping**: Clear error codes with human-readable descriptions * **Related transactions**: View all related API calls #### AI-powered resolution suggestions Our AI assistant analyzes issues and provides resolution suggestions: * **Documentation-based solutions**: AI recommendations derived from Chift's comprehensive documentation * **Step-by-step guidance**: Clear, actionable steps to resolve specific issues #### Key benefits * **Faster resolution times**: Reduce issue resolution time * **Proactive monitoring**: Identify and address issues before they impact your consumers * **Reduced support overhead**: Empower your team with intelligent troubleshooting tools #### Coming soon * **Quick fixes**: Instant solutions for common issues with one-click resolution * **Consumer self-service**: Empower consumers to independently troubleshoot and restart synchronizations for common issues ## Tripletex ### New connector Tripletex We are expanding our Accounting API with Tripletex. Our first connector from Norway.
Tripletex is a comprehensive web-based accounting software designed for small and medium-sized enterprises. The platform integrates essential financial tools including automated bookkeeping, invoicing, payroll management, expense tracking, project management, and year-end closing.
# Product & connector updates - August, 2025 Source: https://docs.chift.eu/changelogs/2025-08 ## Product ### Consumer email logs We’ve introduced consumer email logs to give full visibility into the reminder emails sent to your consumers. This feature helps you monitor communication activity, track the effectiveness of reminders, and ensure more consumers complete their activation process. Preview of email logs ## Connectors ### New connector Planity We are expanding our POS API with Planity.
Planity is a company offering an instant appointment booking service on the internet with beauty professionals.
### New connector Carrepos We are expanding our POS API with Carrepos.
Carrepos is a POS software designed for restaurants, fast-food outlets, bakeries, cafés, snack bars and more!
### New connector Holded We are expanding our Accounting API with Holded.
Holded is the software that automates your accounting, minimizes errors, and seamlessly integrates every aspect of your business.
### New connector Twinfield We are expanding our Accounting API with Twinfield.
Twinfield is a modern accounting and tax software package designed for productivity, quality and security.
# Product & connector updates - September, 2025 Source: https://docs.chift.eu/changelogs/2025-09 ## Product ### Self-service for the execution of syncs We're excited to announce a major enhancement that puts more control in your hands! Our latest release empowers users with direct synchronization capabilities, allowing you to trigger data syncs instantly from either our backoffice or marketplace interface.\ This powerful new feature gives you complete flexibility to: * Execute synchronizations on-demand whenever you need them * Select specific time periods for targeted data syncs * Backdate synchronizations to any historical period * Maintain full control over your data flow This enhanced autonomy means less dependency on support and more efficiency in managing your integrations. ### Better UI for connections We've updated our UI to provide more detailed connection status information for both users and end-users.\ One of our key priorities is ensuring users have all the necessary information about their connections. ## Connectors ### New connector Freeagent We are expanding our Accounting API with Freeagent.
FreeAgent is a modern accounting and tax software package designed for productivity, quality and security.
### New connector Sage Intacct We are expanding our Accounting API with Sage Intacct.
Sage Intacct is a modern accounting and tax software package designed for productivity, quality and security.
### New connector Quickbooks Online We are expanding our Accounting API with Quickbooks Online.
QuickBooks Online accounting software helps you manage your cash flow, track expenses, send invoices and more all in one place.
### New connector Xero We are expanding our Accounting API with Xero.
Xero is a modern accounting and tax software package designed for productivity, quality and security.
# Product & connector updates - December, 2025 Source: https://docs.chift.eu/changelogs/2025-12 ## Product ### Ledger Preview The **Preview** feature for ledger entries allows users to **safely test and validate synchronization flows** without committing any actual ledger entries to the target accounting system. It acts like a “sandbox mode” for data synchronization, showing exactly which ledger entries would be created **without writing any real data**. You can find more information [here](/syncs/ledger-preview) # Product & connector updates - Jan, 2026 Source: https://docs.chift.eu/changelogs/2026-01 ## Product ### AI Chat This feature powered by AI will help you to resolve issues automatically. You can find more information [here](/back-office/user-onboarding/issues) ### Warning for connectors with failed transactions A warning is now shown on connectors whose most recent transaction failed, helping quickly identify potential issues on the connector side, such as expired or invalid credentials causing API errors. At the consumer level, the connector displays a warning when a connector must be reauthorized. # Product & connector updates - March, 2026 Source: https://docs.chift.eu/changelogs/2026-03 ## Product ### API Explorer v2 The API Explorer has been completely redesigned to provide a more powerful and intuitive experience when testing and validating Chift's API endpoints. Key highlights: * **Global access** — Now accessible from the sidebar, without navigating to a specific consumer first. When opened from a consumer's page, the consumer and connection are automatically pre-filled. * **Improved request panel** — Operations grouped by tags, searchable by name/path/tag, with a direct link to the API documentation for each endpoint. The connection dropdown lets you switch between connectors when multiple connections are available. * **Response panel** — Status code, execution duration, and full JSON body with syntax highlighting. Download, copy, or expand to fullscreen. * **Transaction replay** — Re-run any past transaction via the "Open in Explorer" button. All parameters are pre-filled, including connector-specific query parameters. * **Multi-tab support** — Open multiple request tabs to compare responses or work on different endpoints. Tabs persist across sessions. * **Request history** — Every request is saved in the history sidebar with method, status, consumer, environment, and timestamp. Filter by method, status category, consumer, or search by name. * **Raw data toggle** — Include raw connector response data alongside the unified response (GET endpoints only). * **Body editor** — JSON editor with syntax highlighting. Sample payloads are auto-populated from the API schema. * **Keyboard shortcut** — Execute requests with **Cmd+Enter** (Mac) or **Ctrl+Enter** (Windows). * **Resizable drawer** — Compact, default (80%), or fullscreen. Preference saved automatically. You can find more information on the API Explorer [here](/back-office/getting-started/api-explorer). # Product & connector updates - July, 2026 Source: https://docs.chift.eu/changelogs/2026-07 ## Product ### Chifty, your integration assistant Chifty, the AI assistant built into the Chift platform, is now available on all Unified API accounts. Ask why an integration is failing, in plain language, and Chifty checks the consumer's connections, scans the recent API calls and answers with a diagnosis and the concrete next action, quoting the actual error returned by the third-party system. Key highlights: * **Live diagnosis**: Chifty queries your account data in real time and shows each step it takes while building its answer. * **Real errors, real fixes**: it opens the failing API calls, quotes the third-party error message and tells you what to do about it. * **Connector-aware**: answers use the Chift connector documentation (setup steps, prerequisites, known issues). * **Read-only and scoped**: Chifty cannot modify anything, and only sees the data your user can access in the platform. Open Chifty from the button at the bottom of the platform sidebar, and read more in the [documentation](/ai/chifty). Chifty is only compatible with Unified API accounts for now. Support for Syncs accounts is coming. ### Data layer: choose how much history to load When the data layer is enabled on a connection, the first sync backfills historical data into the data layer store. You can now control how far back that initial load goes from the **data layer settings page**: keep the default 12 months, start from today, pick a relative period (months, years, or — for accounting — fiscal years back), load the full history, or set a specific date. If you enable the data layer manually rather than automatically, you can pass the same window straight to the [`enable_datalayer`](/api-reference/endpoints/datalayer/enable-the-datalayer-sync-for-a-connection) endpoint through its `from_date`, `fiscal_years_back` or `full_history` body options. Data layer reads are also clearer while the first sync is still running: for a read sent with `x-chift-datalayer: true` before the initial sync completes, Chift now returns `409 ERROR_DATALAYER_SYNC_PENDING` instead of silently empty data, so you can tell "not synced yet" apart from "no matching records". Read more in [Activating the data layer](/developer-guides/datalayer/activation). # a3ERP Source: https://docs.chift.eu/connectors/accounting/a3erp ## Introduction a3ERP is an enterprise resource planning (ERP) software designed for small and medium enterprises (SMEs) to manage and unify their administrative and production processes. It offers an integrated solution covering areas such as accounting, invoicing, sales, inventory, CRM, and payroll, all from a centralized platform. ## Configure a3ERP ### Prerequisites There is no prerequisite to enable a3ERP on your Chift APP. ### Activation process Activating the connector takes just one click — simply switch it on from the Connectors Page of your platform. ## Test a3ERP To test the software integration, Chift can share its own sandbox account upon request. ## Connect a3ERP * English article: [Help Center - a3ERP EN](https://help.chift.app/articles/4122991757-a3erp-prerequisites?lang=en) * Spanish article: [Help Center - a3ERP ES](http://help.chift.app/articles/4122991757-a3erp-prerequisites?lang=es) ## Coverage ## Troubleshooting ### Specific errors for a3ERP: | Error Code | Error description | Resolution | | ---------------------------------------------- | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------- | | ERROR\_INVALID\_FIELD\_FORMAT\_INVOICE\_NUMBER | The invoice number can only contain digits. | Check your invoice number format and ensure it contains only digits. | | ERROR\_JOURNAL\_TYPE\_NOT\_SUPPORTED | Journal entries can only be created in journals of type 'miscellaneous\_operation'. | Use a miscellaneous operation journal for journal entries. | # ACD Source: https://docs.chift.eu/connectors/accounting/acd ## Introduction ACD supports the digitalization of your business through a modular software suite. Integrating a complete range of production and management, coupled with many specialized modules, web and mobile. Deliver the ACD integration your customers want in no time. ## Configure ACD **Prerequisite(s)** There is no prerequisite to enable ACD on your Chift APP. **Activation Process** Activate the ACD integration on the Chift platform. ## Test ACD To test the software integration, ask Chift to contact and request ACD for a sandbox account and test file (French speaking contacts) on your behalf. ACD will provide us with an account ID, password and file code for dummy data. Use this link to log onto your account: [here](https://isuiteapiprod.suiteexpert.fr/cnx/iSuiteExpert/Connexion) ## Connect ACD To activate a connection with ACD, users will have to go through the following steps. * French article: [Help Center - ACD FR](https://help.chift.app/articles/9297801393-acd?lang=fr) * English article: [Help Center - ACD EN](https://help.chift.app/articles/9297801393-acd?lang=en) ## Coverage ## Troubleshooting User must check that "Compta web" is available on iSuite and if not: contact ACD. ### Specific errors for ACD: | Error Code | Error description | Resolution | | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | | ERROR\_CURRENCY\_NOT\_ALLOWED | Invoices can only be created in Euros in ACD | Please change currency or convert before submitting to ACD | | ERROR\_ACCOUNT\_NUMBER\_NOT\_NOT\_GOOD\_SCOPE | The account 'XXXXXX' cannot be used to create entries. | Please change account number in the invoice line with a product/charge ledger account | | UNEXPECTED\_ACD\_ERROR | Plan de classement inaccessible | User connected through Chift does not have access to the GED in order to upload invoice proof. | | UNEXPECTED\_ACD\_ERROR | Le serveur MySQL est momentanément injoignable | User must contact ACD's support ; it may be due to an ongoing backup. | | UNEXPECTED\_ACD\_ERROR | Le nom du serveur SQL est invalide | Connection reference (CNX) is not valid. | | UNEXPECTED\_ACD\_ERROR | La connection à la base du dossier n'est pas initialisée | ACD's folder is not shared ; user must activate sharing options. | | UNEXPECTED\_ACD\_ERROR | Le serveur n'est pas accessible | User needs to check that there is no security restriction to a specific area/IP. | | UNEXPECTED\_ACD\_ERROR | Impossible de se connecter aux communs de la comptabilité | ACD's outdated, customer has to update ACD to version 23 (at least) and also check sharing options. | | UNEXPECTED\_ACD\_ERROR | Object reference not set to an instance of an object | ACD's outdated, customer has to update ACD to version 23 (at least) and also check sharing options. | | UNEXPECTED\_ACD\_ERROR | Echéance ne peut pas être négative | ACD's outdated, customer has to update ACD to version 23 (at least) and also check sharing options. | | UNEXPECTED\_ACD\_ERROR | Une ligne d'échéance doit avoir un montant | Invoice with no lines cannot be pushed to ACD. No solution - Blocked on ACD side => Contact Chift support | | UNEXPECTED\_ACD\_ERROR | Unknown column ‘LE\_FACTURE’ | User has to open the folder in the ACD interface, this should solve the issue. | | UNEXPECTED\_ACD\_ERROR | Le code de TVA doit être saisie sur une ligne d'écriture avec un compte hors taxe | Change the ledger account to be used in the invoice/expense | | ERROR\_ACCOUNT\_NUMBER\_LENGTH | The provided account number has more characters than allowed. | Shorten the account number to fit within the allowed character limit. | | ERROR\_ACCOUNT\_NUMBER\_NOT\_GOOD\_SCOPE | Collective general accounts cannot be used to book journal entries. You need to use thirdparty accounts instead. | Use a thirdparty account instead of a collective general account. | | ERROR\_ACD\_GED\_ACCESS | The user doesn't have access to the GED folder in ACD. | Grant the user access to the GED folder in ACD. | | ERROR\_ANALYTIC\_ACCOUNT\_NOT\_CONFIGURED | The general account must be configured correctly to be used with analytic accounts. | Configure the general account to be compatible with analytic accounts in ACD. | | ERROR\_INVALID\_ANALYTIC\_DISTRIBUTION | Invalid analytic distribution for hierarchised analytic accounting setup. | Ensure the analytic accounts of lower levels are linked to the analytic accounts of higher levels. | | ERROR\_INVALID\_FIELD\_FORMAT\_INVOICE\_NUMBER | The invoice number has a maximal length of 16 characters in ACD. | Shorten the invoice number to 16 characters or fewer. | | ERROR\_INVALID\_FIELD\_FORMAT\_NUMBER | The journal entry number has a maximal length of 16 characters in ACD. | Shorten the journal entry number to 16 characters or fewer. | | ERROR\_INVALID\_FIELD\_FORMAT\_OPERATION\_NUMBER | The operation number has a maximal length of 16 characters in ACD. | Shorten the operation number to 16 characters or fewer. | | ERROR\_MISSING\_NUMBER | The journal entry number is mandatory in ACD. | Provide a journal entry number. | | ERROR\_MISSING\_INVOICE\_NUMBER | An invoice number is required when creating an invoice in ACD. | Provide an invoice number. | | ERROR\_ISUITEEXPERT\_VERSION | Version 23 of ISuite Expert is required. | Update ISuite Expert to at least version 23. | | ERROR\_JOURNAL\_NOT\_CONFIGURED | The journal is not configured to handle due dates. | Enable due dates on the journal in ACD. | | ERROR\_MISSING\_OPERATION\_NUMBER | The operation number is mandatory in ACD. | Provide an operation number. | | ERROR\_TAX\_CODE\_NOT\_CONFIGURED | The tax code is not configured correctly for deducting VAT ledger accounts. | Set up the deductible account on the tax code in the accounting system. | | ERROR\_CONNECTOR\_CONFIGURATION | Multiple prerequisites are needed for ACD integration to work (e.g., folder must be shared). | Ensure the ACD folder is properly shared and all integration prerequisites are met. | # AFAS Software Source: https://docs.chift.eu/connectors/accounting/afassoftware ## Introduction AFAS Profit is an ERP solution designed to automate core administrative processes within a single platform. It covers financial management, HRM, payroll, document management, and project management, all accessible in a unified system. The software provides clear, real-time insights through reports and dashboards, helping organizations streamline operations efficiently. For this integration, we specifically use **AFAS Profit**. ## Configure AFAS ### Prerequisites There is no prerequisite to enable AFAS on your Chift APP. ### Activation process Activating the connector takes just one click — simply switch it on from the Connectors Page of your platform. ## Test AFAS We can provide credentials for a test environment. Contact Chift to obtain access and connect to our AFAS PROFIT test environment. ## Connect AFAS * English article: [Help Center - AFAS EN](https://help.chift.app/articles/1524023590-afas?lang=en) ## Technical limitations * **Supplier and Customer creation - Address requirement**\ Clients and suppliers **cannot be created without a valid address**. The address field is mandatory and must be provided at creation time. Attempts to create a record without an address will fail. ## Coverage ## Troubleshooting ### Specific errors for AFAS: | Error Code | Error description | Resolution | | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | | ERROR\_ACCOUNT\_NUMBER\_NOT\_GOOD\_SCOPE | Collective general accounts cannot be used to book journal entries. You need to use thirdparty accounts instead. | Use a thirdparty account instead of a collective general account. | | ERROR\_ACCOUNT\_TYPE\_NOT\_SUPPORTED | AFAS does not support financial entries with employee accounts. | Use a different account type for financial entries. | | ERROR\_CONFIGURATION\_DEFAULT\_ACCOUNT\_MISSING | At least one account needs to be configured as a collection account (verzamelrekening). | Configure a suitable account with Type\_verzamelrekening in AFAS. | | ERROR\_CONFIGURATION\_MISSING\_CONNECTORS | At least one AFAS GetConnector is missing from the app connector. | Verify all GetConnectors were imported correctly into the AFAS integration app. | | ERROR\_INVALID\_BODY | An address is required to create clients/suppliers in AFAS. The due date may not be earlier than the entry date. Sales journals must contain at least 1 entry line linked to a client. Purchase journals must contain at least 1 entry line linked to a supplier. | Provide a full address for clients/suppliers, ensure due dates are after the entry date, and include the required partner lines. | # Sage BOB 50 Source: https://docs.chift.eu/connectors/accounting/bob50 ## Introduction Sage BOB 50 is a range of Windows-based accounting and management programs that have been developed specifically for SMEs and fiduciaries. It provides tools for managing accounting, finance, invoicing, and inventory, helping businesses streamline their operations and maintain compliance with Belgian regulations. ## Configure Sage BOB 50 **Prerequisite(s)** No prerequisite to enable the connector. **Activation Process** Activate the Sage BOB 50 integration on the Chift platform. ## Test Sage BOB 50 To test the software integration, you need to go through an integrator to get a sandbox account or you must identify beta users in your client base willing to allow you to use their account for testing. ## Connect Sage BOB 50 To activate a connection with Sage BOB 50, users will have to go through the following steps. * French article: [Help Center - Sage Bob 50 FR](https://help.chift.app/articles/8852915584-sage-bob-50?lang=fr) * English article: [Help Center - Sage BOB 50 EN](https://help.chift.app/articles/8852915584-sage-bob-50?lang=en) ## Coverage ## Troubleshooting ### Specific errors for Sage BOB 50: | Error Code | Error description | Resolution | | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | | ERROR\_INVALID\_FIELD\_FORMAT\_INVOICE\_NUMBER | The invoice number can only contain numbers and has a maximal length of 8 characters in BOB50. | Use only numeric characters and keep the invoice number to 8 characters or fewer. | | ERROR\_INVALID\_FIELD\_FORMAT\_OPERATION\_NUMBER | The operation number can only contain numbers and has a maximal length of 8 characters in BOB50. | Use only numeric characters and keep the operation number to 8 characters or fewer. | | ERROR\_INVALID\_FIELD\_FORMAT\_ENTRY\_NUMBER | The entry number can only contain numbers and has a maximal length of 8 characters in BOB50. | Use only numeric characters and keep the entry number to 8 characters or fewer. | | ERROR\_ZERO\_INVOICE | BOB50 doesn't accept invoices where all lines have an amount of 0. | Ensure at least one invoice line has a non-zero amount. | | ERROR\_INVALID\_FIELD\_FORMAT\_ANALYTIC\_ACCOUNT | The code of the analytic account has a maximal length of 10 characters in BOB50. | Shorten the analytic account code to 10 characters or fewer. | | ERROR\_RESOURCE\_NOT\_SUPPORTED | The method doesn't exist in the installed version of the BOB50 service. | Update BOB50 to a version that supports this feature. | | ERROR\_COMPANY\_NOT\_FOUND | The given company doesn't exist on the Sage BOB 50 server. | Verify the company name and server configuration. | | ERROR\_JOURNAL\_ALREADY\_OPEN | The journal is already open via the BOB50 interface. | Close the journal in the BOB50 interface before pushing data. | | ERROR\_INVALID\_ACCOUNT\_TYPE | Receivable accounts must be used with clients and payable accounts with suppliers when creating miscellaneous operations. | Use the correct account type for the corresponding partner type. | # Dynamics 365 Business Central Source: https://docs.chift.eu/connectors/accounting/businesscentral ## Introduction Microsoft Dynamics 365 Business Central is a cloud-based enterprise resource planning (ERP) software designed for small to medium-sized businesses. It provides a comprehensive solution for managing financials, operations, sales, and customer service. It also offers features such as supply chain management, project management, and human resources management. ## Configure Microsoft Dynamics Business Central 365 **Prerequisite(s)** * Obtain a Tenant Id, Client ID and secret by creating an Azure Application so that your end users can give access to their instance to your app * Activate the Microsoft Dynamics Business Central 365 integration on the Chift platform **Activation Process** 1. Sign in to the [Azure portal](https://portal.azure.com) with your credentials (as an admin). If you do not yet have an Azure account, you can sign up for a free account [here](https://signup.azure.com/). 2. You will see your tenant name in the right upper corner: 3. If you don't have a tenant, you can follow this link to [create your tenant.](https://learn.microsoft.com/en-us/entra/fundamentals/create-new-tenant) 4. You can now start registering your app; go to the portal and select "App registrations" (link [here](https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade)) 5. Click on "New registration" * Give a name to your application * Select one of the "Multitenant" application depending on your need. * Proceed for registration * Under your application, right-click on "Manage" and then "Authentication" to configure the redirection url. * Click on "Add a platform" and select "Web" and enter the following redirect URI: "[https://chift.app/oauth2/redirect](https://chift.app/oauth2/redirect)" * Click on "Configure". 6. Once this is done, we now need to configure permissions for this application. Go under "API permissions" and click on "Add a permission". * Select "Dynamics 365 Business Central" and search for "Financials.ReadWrite.All" as well as "user\_impersonation" and "User.Read" under the "Delegated permissions". Click on "Add permissions" to confirm your choice. * As a last step, go to the "Certificates & secrets" tab and then "Client secrets" to add a new Client Secret. * Give a description to your secret and an expiration date depending on your use case. * Once this is confirmed, copy the value of your client secret to be able to use it in Chift. Under "Overview", copy as well the application client id and your tenant id to be able to use it in Chift. 7. As final check, we need to ensure that assignment is not set to required in 'Enterprise Application' tab. * Go to the 'Enterprise Application' tab in your portal * Toggle off the 'Assignment required?' setting - turn it to 'No' ## Test Microsoft Dynamics Business Central 365 To test the software integration, create a test account [here](https://www.microsoft.com/fr-fr/dynamics-365/products/business-central). Another alternative is to identify a beta tester in your client base. ## Connect Microsoft Dynamics Business Central 365 To activate a connection with Microsoft Dynamics Business Central 365, users will have to go through the following steps: * French article: [Help Center - Microsoft Dynamics 365 Business Central FR](https://help.chift.app/articles/9709526268-dynamics-365-business-central?lang=fr) * English article: [Help Center - Microsoft Dynamics 365 Business Central EN](https://help.chift.app/articles/9709526268-dynamics-365-business-central?lang=en) See the following paragraph about the custom extension that might be needed for end-users. ## Extension ### Chift Extension for Dynamics 365 Business Central Depending on your use case, a **custom Chift extension** may need to be installed for end users. This extension provides access to **additional data not available through Business Central’s standard API**. It **does not modify the native behavior of Business Central**, but **enhances its capabilities** by making more data and functionalities accessible. ### Use Cases Requiring the Extension The extension is required for the following operations: * Creating invoices * Creating journal entries * Creating financial entries * Managing bank accounts * Managing ledger accounts * Deferral codes on sales/purchases invoices (in addition to the extension, a dedicated post connection needs to be enabled on connector level to handle deferral codes) ### Compatibility * Available for **Business Central version 23 and above**. * Supports both **new and existing customers**: * Existing customers can run the extension alongside their current setup **without altering existing connections**. * New customers can install the extension **before or after setting up the initial connector**. ### Mandatory Extension Setting The connector includes a setting in the platform to make the Chift extension **mandatory for all new connections**, ensuring that each new connection takes advantage of the extended capabilities provided by the extension. ## Coverage ## Technical limitations & specificities ### VAT-exempt mode Chift can post invoices and entries in VAT-exempt mode for Business Central. To use this, the end user first needs to complete the [VAT-exempt invoicing setup](https://help.chift.app/articles/9709526268-dynamics-365-business-central?lang=en#vat-exempt-invoicing) in Business Central. Once that's done, you can pass one of two identifiers when sending invoice data through Chift: * `CHIFT_FREE_VAT_CODE` — Chift omits the VAT code and lets Business Central's own Posting Group configuration resolve it (falls back to your 0% entry if set up correctly). * Your specific VAT code — the identifier of the exact VAT Posting Group combination to use, if you have multiple exempt configurations. Chift matches the identifier to the corresponding VAT Posting Setup entry and applies it to the invoice. No match → invoice creation fails. ### Post matching with financial entries Matching after creating a financial entry only works if the matching is done **immediately after creation**, while the batch is still unposted. Once the batch is posted, matching is no longer possible through the standard flow. As an alternative, you can use the `automated_matching_number` field directly on the financial entry endpoint when creating the entry — no separate matching call is then required. ## Specificities Depending on the vendor/customer payment configuration, invoice can go directly to paid when posted skipping the open/posted status. Explanation: [https://www.encorebusiness.com/blog/payment-methods-automatic-payment-in-dynamics-365-business-central/](https://www.encorebusiness.com/blog/payment-methods-automatic-payment-in-dynamics-365-business-central/) **Invoice status correspondence** | Chift | Dynamics | | ------ | -------- | | Draft | Draft | | Posted | Open | | Paid | Paid | ## Troubleshooting ### Specific errors for Business Central: | Error Code | Error description | Resolution | | ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | | ERROR\_CONNECTOR\_OUTDATED\_EXTENSION | The extension is installed but the endpoint or the provided body/params requires the extension to be updated. | Update the extension through Business Central's interface. | | ERROR\_ACCOUNT\_NUMBER\_CONFIGURATION | Ledger accounts need the "Gen. Prod. Posting Group" configured to be used in accounting documents. | Configure the "Gen. Prod. Posting Group" on the ledger account in Business Central. | | ERROR\_ACCOUNT\_NUMBER\_NOT\_GOOD\_SCOPE | Summary ledger accounts cannot be used in bookings/invoices in Business Central. | Use a detail (non-summary) ledger account. | | ERROR\_BUSINESSCENTRAL\_NOSERIES\_CONSUMED | The No. Series has been fully consumed and needs to be extended. | Update the No. Series settings in Business Central to extend the allowed range. | | ERROR\_CONNECTOR\_CONFIGURATION | A deferral template must be set up to use deferral codes (start\_date and end\_date) in invoices. | Set up a deferral template in Business Central. | | ERROR\_CONNECTOR\_MISSING\_EXTENSION | The Business Central Chift extension is required but not installed or outdated. | Install or update the Chift extension for Business Central. | | ERROR\_INVALID\_BODY | At least one input field of the body is invalid. | Verify the provided fields and values are correct for Business Central. | | ERROR\_MULTIPLE\_VAT\_REGIMES\_USED | You can only use VAT codes from the same VAT posting group in Business Central. | Ensure all VAT codes in the request belong to the same VAT posting group. | | ERROR\_TAX\_CODE\_NOT\_CONFIGURED | The VAT ledger accounts (payable/deductible) must be set up correctly in Business Central. | Configure the VAT payable and deductible ledger accounts on the tax code. | | ERROR\_NO\_GL\_ACCOUNT\_CODE\_FOUND | Cannot determine the ledger account number for the new bank account because no existing bank accounts exist for reference. | Create an initial bank account manually in Business Central first. | # Cegid Loop Source: https://docs.chift.eu/connectors/accounting/cegidloop ## Introduction Cegid Loop manages the entire activity of accounting firms in the Cloud, accelerating accounting production and reinventing the client-firm relationship. ## Configure Cegid Loop **Prerequisite(s)** * You need a subscription key from Cegid Loop to set up the connection with the connector. * Activate the Cegid Loop integration on the Chift platform. **Activation Process** There are two ways to configure Cegid Loop: 1. **Get Listed as a Cegid Loop Partner**: You are or wish to be a listed partner with Cegid Loop. You will encode your own API Key, provided by Cegid in Chift’s. 2. **Use Chift's Partner Keys:** Chift can provide you with our API key and encode Chift’s API Key in your APP. (Important impact if you change between the two options - all clients will have to reconnect) ## Test Cegid Loop To test the software integration, Chift can share its own sandbox account upon request. ## Connect Cegid Loop To activate a connection with Cegid Loop, users will have to go through the following steps. * French article: [Help Center - Cegid Loop - FR](https://help.chift.app/articles/8678889120-cegid-loop?lang=fr) * English article: [Help Center - Cegid Loop - EN](https://help.chift.app/articles/8678889120-cegid-loop?lang=en) ## Coverage ## Troubleshooting ### Specific errors for Cegid Loop: | Error Code | Error description | Resolution | | ----------------------------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | | UNEXPECTED\_CEGIDLOOP\_ERROR | Error: Addon | Temporary error in Cegid Loop, try again later and contact chift's support if the error persists | | ERROR\_ANALYTIC\_ACCOUNT\_NOT\_CONFIGURED | The account is not configured to be used with analytic accounts. | Configure the ledger account to support analytic accounting in Cegid Loop. | | ERROR\_IMPORT\_FAILED | The asynchronous import job returned an unknown error. | Retry the request. If the error persists, contact Chift support. | | ERROR\_TAX\_CODE\_NOT\_CONFIGURED | The VAT ledger accounts are not set up correctly for deducting VAT from invoices. | Configure the VAT ledger accounts on the tax code in the accounting system. | # Contasol Source: https://docs.chift.eu/connectors/accounting/contasol ## Introduction Contasol is a Spanish accounting software developed by Software DELSOL (part of the TeamSystem group). It is used by SMEs and accountants to manage bookkeeping, VAT and financial reporting, and belongs to a wider suite of products alongside FactuSOL (invoicing) and Bilin. Contasol is installed **on premise**, but its database can be stored in the cloud and its data can be queried through a built-in API once that API has been activated. Invoices are not created in Contasol itself but in **FactuSOL**. When both products are purchased and the integration is configured, FactuSOL invoices can be imported into Contasol as journal entries. ## Configure Contasol ### Prerequisites The end user must have Contasol installed with its API access enabled. Activating the API relies on a **developer account** ("cuenta de fabricante") registered with Software DELSOL, which provides two identifiers used to activate the API inside Contasol: * **CodigoFabricante** — the developer/manufacturer code tied to the account. * **EmailFabricante** — the email address linked to that developer account. Software DELSOL sends the generated API credentials to this address. Who owns that developer account is what defines the two activation options below. ### Activation process When connecting your end users to Contasol, you can choose between two approaches depending on who holds the developer account. In both cases the API credentials are ultimately sent by email by Software DELSOL and are then entered in the Chift connection settings. #### Option 1 — Use your own developer account You (the Chift customer) create a single developer account with Software DELSOL and encode your **CodigoFabricante** and **EmailFabricante** on the connector page in Chift. Your end users enter these same identifiers in their Contasol API access screen. The credentials email is then sent to your developer email address, and you pass the resulting credentials on to the end user (or use them to set up the connection on their behalf). With this option the end user is **not autonomous** — they depend on you to share the API credentials. Choose it when you prefer to centralize developer-account management. #### Option 2 — Let the end user use their own developer account The end user creates **their own** developer account with Software DELSOL, obtains their own CodigoFabricante, activates the API in Contasol and receives the credentials email directly. They then enter those credentials in the Chift connection. With this option the end user is **fully autonomous** — no identifiers need to be shared with you. The end-user steps for this option (create the developer account, activate the API in Contasol, fill in the Chift connection) are described in the Help Center article linked below. ## Test Contasol You can create a free test account [here](https://www.sdelsol.com/prueba-gratuita/contasol/). After completing the steps you will receive an installer and credentials valid for one month. ## Connect Contasol To activate a connection with Contasol, end users go through the following steps: * [Connect Contasol – English](https://help.chift.app/articles/5943281299-contasol?lang=en) * [Connect Contasol – Spanish](https://help.chift.app/articles/5943281299-contasol?lang=es) ## Technical limitations & specificities ### Bank feed Contasol does not support a bank feed. ### Attachments Contasol does not store files, so attachments are not supported on all endpoints. ### Clients & suppliers * Filtering on `updated_after` date is not supported. * On creation (POST), only a **single address** object is supported. ### Analytic plans & accounts * A single default analytic plan is returned ("Departamentos contables"). * Analytic accounts cannot be split: departments and their sub-departments are returned as a flattened list. ### Invoices * Invoices are derived from journal entries. ### Journal entries * All entries are posted by default, so the `unposted_allowed` filter has no effect. ### Financial entries * No `tax_info` object is returned. ### Payment terms Unlike other Spanish connectors, Contasol does not build due dates from a payment-term template (the "tipo cartera" is purely informative). To keep a consistent behaviour, Chift returns a standard list of payment terms (30, 60 and 90 days and the possible combinations) that mirrors the Contasol interface. When a payment term is set on an invoice, Chift computes the due dates from the invoice date; if they do not match the recorded due date, an error is returned. ## Coverage # Accounting API - Coverage Source: https://docs.chift.eu/connectors/accounting/coverage # DATEV Source: https://docs.chift.eu/connectors/accounting/datev ## Introduction DATEV is by far one of the most widely used accounting platforms in Germany, with two distinct products relevant for your accounting integrations: * **DATEV Rechnungswesen** — on‑premise core accounting system. * **DATEV Unternehmen Online (DUO)** — cloud platform for document management and collaboration with accountants. Chift’s DATEV connector gives you **unified access to both systems through a single integration layer**, abstracting the complexity of choosing one point of access or the other. There are **no major restrictions**. Chift’s connector supports **full accounting integration** with minimal setup, including posting and retrieving journal entries, managing master data, invoices, analytical accounting, and attachments. ## Configure DATEV **Prerequisite(s)** * You must have premium access in your Chift account to activate this connector. * Rechnungswesen: no additional prerequisites if you expose the API on your own (see below). * DUO: requires a Client ID and Secret (Chift can provide these so you don’t need your own). **Activation Process** 1. Activate the DATEV connector(s) in your Chift environment. There are **two connectors corresponding to the two connection methods**: * **Public URL method** (requires external access to the DATEV API). * **Local Agent method** (does not require URL exposure; agent installed on server). You can activate **one or both connectors**, depending on whether you want to support both connection methods for your users. ## Test DATEV Testing against a real DATEV instance can be challenging due to how DATEV environments are provisioned. Options include: * Request a **DATEV test environment** (can be slow or costly), or * Use **beta partners** with existing DATEV access — a pragmatic option if your integration is already live and you need test coverage. Chift can help with both approaches. ## Connect to DATEV ## Connection options DATEV’s architecture imposes constraints on external access. Chift supports these scenarios: * **Expose local API:** Simple and fast if you can make the URL externally accessible. You can also use the [Riecken Cloud Gateway](https://cloudgateway.riecken.io/index.html), which exposes the local DATEVconnect API externally. * **Local agent installation:** Needed when URL exposure is restricted. Ensures DATEV security guarantees are maintained. **Additional context:** * For attachments, Chift uses **DUO**, which requires client and consultant numbers. * Depending on setup, activation may require IT manager involvement (expose URL or install agent). * Planned DATEV API release (Q1 2027) will introduce a new connector simplifying activation further. Chift offers **two ways to connect**, both providing **identical capabilities**. The difference lies in installation and prerequisites: 1. **Public URL Method** (preferred when possible) * Requires exposing the local DATEV API URL externally. * Quick activation once URL is accessible. * IT manager or integrator involvement is needed. * [Activation guide](https://help.chift.app/articles/9938133153-datev?lang=en) 2. **Local Agent Method** (used when URL cannot be exposed) * Installs an agent on the DATEV server to proxy requests internally. * No URL exposure required. * Requires a Windows user with proper permissions for installation. * [Activation guide](https://help.chift.app/articles/6424533057-datev-localagent?lang=en) **Note:** Both methods use the same DATEV entry point; the user experience and capabilities are identical. ## Coverage ## Troubleshooting ### Specific errors for DATEV: | Error Code | Error description | Resolution | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | | ERROR\_CONNECTOR\_AUTHENTICATION | An error occurred while authenticating with DATEV | Verify that your account still has the rights to use the API or that your user still exists | | CREDENTIALS\_ERROR | The provided Client Number and/or Consultant Number doesn't seem to be correct or you don't seem to have access to it | Verify that your Client Number and/or Consultant number is still valid or that your user still exists | | ERROR\_NO\_DOCUMENT\_MANAGEMENT | The client doesn't have the document management feature | Verify that your client has access to the document management features | | ERROR\_ACCOUNT\_NUMBER\_CONFIGURATION | Ledger accounts can only be used with configured VAT codes in DATEV. | Configure the correct VAT codes on the ledger account. | | ERROR\_ATTACHMENT\_UPLOAD | The attachment upload to DATEV Unternehmen failed. | Verify the file format and encoding, then retry the upload. | | ERROR\_INVALID\_HOST | The DATEV API URL is not valid or not accessible. | Verify the URL starts with 'https\://' or 'http\://' and is a valid DATEV Rechnungswesen URL. | | ERROR\_INVALID\_BODY | When pushing journal entries into DATEV, VAT codes must be specified using the tax\_info attribute, not separate entry items for VAT. | Use the tax\_info attribute to specify VAT codes instead of separate VAT line items. | | ERROR\_IMPORT\_FAILED | The asynchronous EXTF import job returned an unknown error (DATEV Buchungsdatenservice). | Retry the request. If the error persists, contact Chift support. | | ERROR\_NO\_EXTF\_API\_ACCESS | The Buchungsdatenservice/EXTF import feature is not activated for this company (DATEV Buchungsdatenservice). | Activate the Buchungsdatenservice feature in DATEV for the company. | # e-conomic Source: https://docs.chift.eu/connectors/accounting/e-conomic ## Introduction e-conomic is a cloud-based accounting software developed by Visma, primarily used by small and medium-sized businesses in Denmark and Scandinavia. It offers features such as invoicing, bookkeeping, VAT reporting, and financial reporting. e-conomic uses a **dual-API model**: a legacy REST API (`restapi.e-conomic.com`) and a newer OpenAPI (`apis.e-conomic.com`). Chift uses both depending on the endpoint. ## Configure e-conomic ### Prerequisites The end user must have an active e-conomic subscription. Beyond that, the prerequisites depend on the authentication option you choose: * **Option 1 — Use Chift's app:** no additional setup required. * **Option 2 — Use your own app:** you must have an e-conomic developer agreement, create an app in your developer account, and store its `AppSecretToken`. ### Activation process When connecting your end users to e-conomic, you can choose between two authentication approaches. In both cases the end-user experience is identical: the user clicks an installation URL and generates an `AgreementGrantToken`. #### Option 1 — Use Chift's app Use Chift's own e-conomic app. No setup is required — the app appears under the **Chift** name on the end user's e-conomic account. \ → Reach out to your Chift point of contact and he will activate it for you. #### Option 2 — Use your own app Create your own e-conomic developer app and provide your own `AppSecretToken`. The app then appears under your own brand name on the end user's e-conomic account. This requires an e-conomic developer agreement. 1. In your developer account, click **Create a new app**. Create a new app button in the e-conomic developer portal 2. Fill in the **New app** form. Note that the name and roles **cannot be changed later**. New app form in the e-conomic developer portal with required roles and required modules **Required roles** — select at least one role based on your use case. e-conomic validates that the end user granting access has the matching rights. * **Superuser** — recommended for full accounting integrations (journals, customers, invoices, suppliers, attachments, company info). Note that regular users won't be able to authorize access with this setting. * **Bookkeeping** — suitable if you only need access to journals, entries, accounts and attachments (no access to customers or company information). * **Sales** — if you want to handle customers and invoices. * **Project employee** — not applicable to the Chift connector. To handle accounting data, customer data and company information at once, use one of these setups: **Superuser**, or **Bookkeeping + Sales**. **Required modules** — modules extend e-conomic's default features. Select a module only if your app depends on it. If not all of your customers have a given module, leave it unselected — otherwise customers without it won't be able to install the app. 3. After creating the app, retrieve its `AppSecretToken` and `InstallationURL` from the app's credentials page. e-conomic app credentials page showing AppPublicToken, AppSecretToken and InstallationURL ## Test e-conomic e-conomic provides a **free trial environment** that can be used for testing integrations. To create a test account: 1. Go to [e-conomic.dk/regnskabsprogram/demo-alle](https://e-conomic.dk/regnskabsprogram/demo-alle). 2. Sign up for a free 14-day trial with demo data. 3. If you need the trial extended beyond 14 days for testing purposes, contact [api@e-conomic.com](mailto:api@e-conomic.com) with your agreement number and the duration needed. The sandbox is a real e-conomic agreement — it uses the same APIs as production. There is no separate sandbox base URL. ## Connect e-conomic To activate a connection with e-conomic, users will have to go through the following steps. * English article: [Help Center - e-conomic EN](https://help.chift.app/articles/5451889171-e-conomic?lang=en) ## Rate limits e-conomic uses a **cost-based token bucket** system (rolled out December 2025). Rather than limiting the number of requests per second, e-conomic limits the *cost* of requests, where each endpoint has a different cost based on its load on the platform. | Parameter | Value | | -------------------------------- | ------------------------------------------------------------------------------------------------- | | **Bucket size** (burst capacity) | 2,000 tokens per agreement | | **Refill rate** (sustained rate) | 30 tokens/second (over 60s) | | **Cost per request** | Varies by endpoint (e.g. `GET /accounts/{id}` = 1 token, `GET /invoices/booked/{id}` = 13 tokens) | When a limit is exceeded, e-conomic returns an HTTP `429 Too Many Requests` error. Response headers include: * **`X-CallCost`**: the token cost of the request just made. * **`X-RateLimiting`**: current bucket status (e.g. `limit-2000-per-60-seconds: 1450/2000`). Chift handles retries automatically using exponential backoff. For more details, see the [e-conomic rate limiting documentation](https://techtalk.e-conomic.com/building-a-more-stable-api-ecosystem-together/). ## Technical limitations & specificities ### Single-folder connector Each e-conomic connection maps to a single accounting agreement. One Chift connection = one e-conomic agreement. ### Journal restrictions e-conomic journals have an `allowedEntryType` field that restricts which account types can be used within a journal. This affects how journal entries are created via the Chift API. | `allowedEntryType` | Restriction | Accepted Chift line types | | ------------------ | ----------------------- | --------------------------------------------------------- | | 0 | All types | `general_account`, `customer_account`, `supplier_account` | | 2 | Customer Payment | `customer_account` only | | 3 | Supplier Invoice | `supplier_account` only | | 4 | Supplier Payment | `supplier_account` only | | 5 | Finance Voucher | `general_account` only | | 10 | Manual Customer Invoice | `customer_account` only | When creating a journal entry, all lines must match the journal's `allowedEntryType`. If mixed line types are sent to a restricted journal, the API returns an `ERROR_JOURNAL_NOT_GOOD_SCOPE` error. For journals with `allowedEntryType: 2` (customer payment), the contra account (bank account) is automatically applied by e-conomic based on the journal's `customerContraAccount` setting — no need to specify it explicitly. To retrieve the list of journals and their restrictions, use `GET /consumers/{id}/accounting/journals`. The `force_general_account` field is not supported when creating journal entries in e-conomic. e-conomic always uses the collective account associated with the customer or supplier, so providing this field returns an error. ### VAT auto-calculation When creating journal entries with a `vatCode`, e-conomic automatically calculates and posts the VAT amount to the corresponding VAT account at booking time. No explicit VAT line needs to be created. ## Coverage # e-Boekhouden Source: https://docs.chift.eu/connectors/accounting/eboekhouden ## Introduction E-Boekhouden is an accounting platform widely used by freelancers, small businesses, and associations in the Netherlands. It provides essential features such as invoicing, bookkeeping, bank reconciliation, VAT returns (BTW), and inventory management. Known for its affordability and ease of use, the platform is also compliant with Dutch tax regulations and integrates easily with the Belastingdienst (Dutch Tax Authority). e-Boekhouden.nl offers various automation options and supports API access for connecting with other software systems, making it a flexible solution for managing financial administration. ## Configure E-Boekhouden **Prerequisite(s)** There is no prerequisite to enable eAccounting in your Chift App. ## Test E-Boekhouden To test the software integration, you can create yourself a test account. ## Connect E-Boekhouden To activate a connection with e-Boekhouden, users will have to go through the following steps. * English article: [Help Center - e-Boekhouden - EN](https://help.chift.app/articles/7327802906-e-boekhouden?lang=en) ## Coverage ## Troubleshooting ### Specific errors for E-Boekhouden: | Error Code | Error description | Resolution | | ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | | ERROR\_INVALID\_BODY | In E-Boekhouden, you cannot send multiple partners in the same entry. When creating a financial entry in the payment journal, you must specify an automated matching number containing the invoice number of an existing open invoice. | Ensure only one partner is used per entry and provide the automated matching number when required. | | ERROR\_MISSING\_INVOICE\_NUMBER | An invoice number is required when creating an invoice in E-Boekhouden. | Provide an invoice number when creating invoices. | # Exact Online Source: https://docs.chift.eu/connectors/accounting/exactonline ## Introduction Exact Online is a business software that provides a range of tools for small and medium-sized enterprises to manage their finances, accounting, inventory, and project management. Deliver the Exact integration your customer wants in no time. ## Configure Exact Online **Prerequisite(s)** You will have to get listed as an Exact Online partner to collect partner account keys to configure the connector on your account. To do so, you will need to: * Create an Exact Online partner account, with an OAuth2 application. * Configure your partner account * Submit your application for Exact Online's approval **Activation Process** 1. Create your Exact Online developer account:
[Link for a Belgium account](https://start.exactonline.be/docs/HRMSubTrialNew.aspx?bcaction=0\&type=10\&language=EN\&UseSimpleWizard=1\&PackageSetCode=APPCENTER)
[Link for a French account](https://start.exactonline.fr/docs/HRMSubTrialNew.aspx?bcaction=0\&type=10\&language=EN\&UseSimpleWizard=1\&PackageSetCode=APPCENTER)
[Link for a Dutch account](https://start.exactonline.nl/docs/HRMSubTrialNew.aspx?bcaction=0\&type=10\&language=EN\&UseSimpleWizard=1\&PackageSetCode=APPCENTER)
[Link for a German account](https://start.exactonline.de/docs/HRMSubTrialNew.aspx?bcaction=0\&type=10\&language=EN\&UseSimpleWizard=1\&PackageSetCode=APPCENTER) Creating a developer account for **Exact Online** now requires a **paid monthly subscription**. To register an application and get access to Exact Online APIs, developers must first subscribe to a **developer plan**. More info [here](https://support.exactonline.com/community/s/knowledge-base#All-All-DNO-Content-developerssubscriptiont). Pricing per region: * **Netherlands (NL)**: see [Exact Online Developer plan - NL](https://www.exact.com/nl/wizard/EOLDeveloper) * **Belgium (BE)**: see [Exact Online Developer plan - BE](https://www.exact.com/benl/wizard/EOLDeveloper) * **France (FR)**: free 2. Set up your Oauth2 application by going to your Exact Online account → “Partners” section in the menu → “Exact Online App Store” (In the section “Manage my applications”) * Create a new application by clicking on “+” * Enter the name of your APP to be displayed in Exact Online’s Marketplace * Enter the redirect URL (Chift): [https://chift.app/oauth2/redirect](https://chift.app/oauth2/redirect) * Make sure you tick all the below configurations of your app Exactonline 3. Wait for Exact Online’s approval of your application - this may take a few days. 4. Go to your account, connectors menu and activate Exact Online in one click. Then, you will be asked to provide your Exact Online client ID & secret. ## Test Exact Online To test the software integration, you can use the partner account you created during the configuration process. -> Once the testing is done, you need to get the approval of Exact Online to use the integration (your app) with external clients. Once your app is approved, external clients will be able to use the integration. ## Connect Exact Online To activate a connection with Exact Online, users will have to go through the following steps. * For Netherlands: [Help Center - Exact Online - NL](https://help.chift.app/articles/3853865771-exact-online-nl?lang=en) * For Belgium: [Help Center - Exact Online - BE](https://help.chift.app/articles/7719703254-exact-online-be?lang=en) * For France: [Help Center - Exact Online - FR](https://help.chift.app/articles/8093104901-exact-online-fr?lang=fr) * For Germany: [Help Center - Exact Online - DE](https://help.chift.app/articles/8976563324-exact-online-de?lang=en) ## Rate limits The Exact Online API is subject to the following limits: * **60 requests per minute** * **5,000 requests per day** These limits apply per Exact Online environment. Users can increase the daily API limit by subscribing to an **Exact Online Premium** plan: * **Up to 30,000 requests per day** * **No per-app request limit** Exact Online enforces a **fair use policy**. Applications that excessively exceed limits or generate abusive traffic may be throttled or blocked. For more details, see the Exact Online documentation:
[https://support.exactonline.com/community/s/knowledge-base#All-All-DNO-Simulation-gen-apilimits](https://support.exactonline.com/community/s/knowledge-base#All-All-DNO-Simulation-gen-apilimits) ## Technical limitations & specificities ### PDF attachments on financial entries Exact Online does not allow attaching PDFs to entries that are not linked to a customer or supplier. If the financial entry has no associated customer/supplier, the PDF upload will be rejected. ## Coverage ## Troubleshooting ### Specific errors for Exact Online: | Error Code | Error description | Resolution | | ---------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | | ERROR\_ACCOUNT\_NUMBER\_NOT\_GOOD\_SCOPE | Only receivable/payable accounts can be used as a forced general account with partner accounts. | Use a receivable or payable account as the forced general account. | | ERROR\_ANALYTIC\_ACCOUNT\_NOT\_CONFIGURED | Analytic accounts need to be configured correctly to be used with a specific ledger account. | Configure the analytic account for the ledger account in Exact Online. | | ERROR\_BANK\_ACCOUNT\_NUMBER\_ALREADY\_EXISTS | Exact Online has a uniqueness constraint on bank account numbers. | Use a unique bank account number. | | ERROR\_CONNECTOR\_MAINTENANCE | Exact Online is performing maintenance (usually around 4AM). | Retry the request after the maintenance window. | | ERROR\_INVALID\_FIELD\_FORMAT\_BANK\_ACCOUNT | The bank account or IBAN is not valid. | Provide a valid bank account number or IBAN. | | ERROR\_INVALID\_FIELD\_FORMAT\_INVOICE\_NUMBER | The invoice number can only contain numbers between 1 and 4294967295. | Use a valid numeric invoice number within the allowed range. | | ERROR\_INVALID\_FIELD\_FORMAT\_NUMBER | The entry number must be between 1 and 4294967295. | Use a valid numeric entry number within the allowed range. | | ERROR\_INVALID\_BODY | An attachment can only be linked to an entry when a client or supplier account is used in the entry items. | Include a client or supplier account in the entry items before attaching a PDF. | | ERROR\_NO\_GL\_ACCOUNT\_CODE\_FOUND | Could not determine the account number linked to the created bank account. | Verify the bank account configuration in Exact Online. | | ERROR\_PARTNER\_ALREADY\_EXISTS | Exact Online found a duplicate client or supplier based on uniqueness checks (e.g., VAT number). | Check for existing clients/suppliers with the same VAT number or other unique identifiers. | # Fiken Source: https://docs.chift.eu/connectors/accounting/fiken ## Introduction Fiken is a Norwegian cloud-based accounting software built for small businesses, freelancers, and self-employed professionals. It combines bookkeeping, invoicing, expense tracking, VAT reporting, and bank reconciliation in a single, easy-to-use platform tailored to Norwegian accounting standards and tax requirements. With its automation features and accountant-friendly workflows, Fiken helps businesses keep their finances organized and stay compliant without specialized accounting expertise. ## Configure Fiken **Prerequisite(s)** * A Fiken account with developer mode enabled * Authentication can happen in two ways: * **Using the Chift integration app** – the easiest option. Ask your Customer Success Manager to add Chift's OAuth2 keys to the platform, and your customers will be ready to connect. * **Creating your own integration app in Fiken** – register your own app in Fiken and use the generated (test) API keys for your first 5 customers. Once at least 3 customers have a working integration, notify the Fiken support team; they will verify and certify the integration and return a set of production API keys to be used for all subsequent customers. **Activation Process** **1. Enable developer mode** Log in to your Fiken account and go to **Rediger konto → Profil → Andre innstillinger**. Check the box indicating you are a developer. **2. Create an OAuth2 application** * Click the **API** tab under **Brukerinnstillinger** * Create a new application * Set the redirect URI to `https://chift.app/oauth2/redirect` * Copy your **Client ID** and **Client Secret** **3. Activate the connector on Chift** In your Chift back office, open the Fiken connector and toggle activation. You will be prompted to paste your Client ID and Client Secret. End-users will be redirected to Fiken to authorize access via OAuth2. During development, Fiken allows up to **5 connected users** for free. For production use, email `api@fiken.no`. ## Testing Fiken To create a test company, register a company that is not listed in Brønnøysundregistrene and contact `hjelp@fiken.no` for extended trial access. ## Connecting Fiken To activate a connection with Fiken, users will have to go through the following steps: * English article: [Help Center - Fiken EN](https://help.chift.app/articles/5984410532-fiken?lang=en) * French article: [Help Center - Fiken FR](https://help.chift.app/articles/5984410532-fiken?lang=fr) ## Coverage ## Troubleshooting ### Specific errors for Fiken: | Error Code | Error description | Resolution | | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | | ERROR\_INVALID\_BODY | Fiken requires exactly 11 numeric digits for bank account numbers. | Provide a valid 11-digit bank account number. | | ERROR\_INVALID\_ANALYTIC\_DISTRIBUTION | You can only use 1 analytic account per invoice in Fiken. | Use only one analytic account per invoice. | | ERROR\_INVALID\_INVOICE\_BODY | A payment method (bank account) is required for customer invoices in Fiken. Fiken only supports one project per invoice (all lines must use the same analytic account). | Provide a bank account as the payment method and use only one analytic account per invoice. | | ERROR\_CURRENCY\_NOT\_ALLOWED | You can only create financial entries in NOK in Fiken. An exchange rate must be provided for other currencies. | Use NOK as the currency or provide an exchange rate for foreign currencies. | | ERROR\_INVOICE\_CURRENCY\_MISMATCH | You can only create payments in the currency of the invoice in Fiken. All invoices must be in the same currency. | Ensure the payment currency matches the invoice currency. | # Fortnox Source: https://docs.chift.eu/connectors/accounting/fortnox ## Introduction Fortnox is the leading cloud accounting and business software in Sweden and one of the largest in the Nordics, widely used by SMEs and accounting firms. The Chift Fortnox connector exposes Fortnox's bookkeeping features through Chift's unified Accounting API (journals, chart of accounts, ledger/bank accounts, journal & financial entries). **Production options** As an integrator (Chift's client), you first create your own Fortnox developer account and Fortnox app (Client ID / Client Secret). **Developing and testing is free.** To move to production, you must choose between **two options**: Can be used with external production accounts. The application **won't be listed on the Fortnox Marketplace** and can only be activated externally (i.e. distributed and activated directly by you for your own customers). **No additional requirement** — deploy your integration for your own customers. **Listed on the Fortnox Marketplace**, making your integration discoverable by all Fortnox users. Requires an **App Partner agreement** + **Fortnox certification** of your app. Fortnox operates a **revenue-share model** on Marketplace apps (partner receives **75%**). For up-to-date pricing and partner conditions, see the [Fortnox Developer program](https://www.fortnox.se/developer). **End-user pricing** Fortnox is sold to end-users as a **modular subscription**: customers pay a small monthly base fee and then add the modules they need (Bookkeeping, Invoicing, Supplier invoices, Salary, etc.). The Fortnox API only exposes the modules the end-user has actually subscribed to, so the scopes you request must be covered by their plan (otherwise the OAuth flow or API calls will fail with an authorization error). Typical modules relevant to the Chift Accounting connector: * **Bokföring** (Bookkeeping) — required for chart of accounts, journals and journal entries. * **Fakturering** (Invoicing) — required for customer invoices and customers. * **Leverantörsfakturor** (Supplier invoices) — required for supplier invoices and suppliers. Prices are updated by Fortnox and vary by module and company size. For the current price list, see the official [Fortnox price list](https://www.fortnox.se/produkt/prislista). ## Configure Fortnox ### Prerequisites * A **Fortnox developer account** ([fortnox.se/developer](https://www.fortnox.se/developer)). * Your own **Fortnox app** — its **Client ID** and **Client Secret**. Developing and testing is free. * For production, one of: * **Private App** — no additional requirement. * **Public Marketplace App** — an App Partner agreement and Fortnox certification of your app. ### Activation process Follow these three steps to connect your own Fortnox app to Chift. Before you can make any Fortnox API calls, register as a developer at [fortnox.se/developer](https://www.fortnox.se/developer). This gives you access to the Developer Portal, where you create your integration and receive your **Client ID** and **Client Secret**. Fortnox Developer Portal – OAuth Client ID configuration See [Create a developer account & sandbox](#create-a-developer-account-and-sandbox) below for a step-by-step walkthrough of the registration flow. Once registered, create an integration record. This is where you configure your **redirect URI**, define your requested **scopes**, and optionally submit for a Fortnox Marketplace listing. Set the redirect URI to: ```text theme={null} https://chift.app/oauth2/redirect ``` Fortnox Developer Portal – Redirect URI and Permissions The scopes enabled on your Fortnox integration must **exactly match** the scopes requested in your OAuth app's authorization flow. Any mismatch will cause the authorization to fail with `2000663: Har inte behörighet för scope`. See the [Fortnox scopes documentation](https://www.fortnox.se/developer/guides-and-good-to-know/scopes). **Common scopes for bookkeeping:** `companyinformation`, `invoice`, `supplierinvoice`, `customer`, `supplier`, `bookkeeping`, `payment`, `settings`, `costcenter`, `project`, `inbox`, `connectfile`. Further documentation is coming to explain which scopes to enable depending on your Chift use case. In your Chift back office, open the Fortnox connector and toggle activation. You will be prompted to paste your **Client ID** and **Client Secret**. End users are then redirected to Fortnox to authorize access via OAuth2. This walkthrough covers the full Fortnox developer registration flow. The path is the same for Swedish and non-Swedish companies — the only differences are: * **Companies registered outside Sweden** must tick the **My company is registered outside of Sweden** box on the registration form (step 3), which removes the Swedish organization number field. * **Users without BankID or Freja eID+** (typically foreign citizens) cannot obtain their Fortnox ID automatically and must call Fortnox support to verify their identity at the end of the flow (step 10). Go to [fortnox.se/developer](https://www.fortnox.se/developer) and click **Register now**. Fortnox developer landing page with the Register now button On the *“Are you already a Fortnox customer?”* screen, click **No, I do not have a company in Fortnox**. Fortnox screen asking whether you are already a customer On the **Create a developer account** form, keep the **Business** tab selected. If your company is registered outside Sweden, tick **My company is registered outside of Sweden** — this removes the **Organization number** field. Swedish companies leave the box unchecked and fill in their Swedish organization number. Fill in your company name, contact details, and email, confirm the *“I am human”* check, then click **Create account**. Create a developer account form with the outside-Sweden option checked You land on a **Thank you for your registration** page asking you to confirm your email address. Thank you for your registration page prompting email confirmation Open the confirmation email from Fortnox and click the confirmation link. Fortnox email confirmation message For a company registered outside Sweden, the confirmation page explains that **Fortnox support will finalize your registration manually** — there is no self-service *“create your Fortnox ID”* step at this stage. Swedish companies proceed directly to the next step. Email confirmed page explaining Fortnox support will finalize the registration Shortly after, non-Swedish companies receive an automated email stating that their order is being handled manually. This is the **expected behavior for non-Swedish companies**, not an error — no action is required at this point. Automated email stating the registration is being processed manually When you receive the activation email, click **Activate**. You land on **Connect … to your Fortnox ID**. If you do not already have a Fortnox ID, click **Create Fortnox ID ›** instead of signing in. Sign-in screen to connect to a Fortnox ID Create Fortnox ID – verify your identity screen Fortnox offers two e-identification methods: **BankID** (requires a Swedish personal identity number) or **Freja eID+** (accepts foreign nationals via passport, but needs a separate app). If you have neither, click **I cannot use e-identification ›** and confirm. You can continue, but you will need to contact Fortnox support at the end of the flow to verify your Fortnox ID. Verify your identity screen with the option to skip e-identification Set a password (12+ characters) and choose your Fortnox UI language, then continue. Personal information step with password and language fields Confirm the email address used for your Fortnox ID (you can change it here), then continue. Contact information – email confirmation step Enter a **real** mobile number — Fortnox sends a one-time SMS verification code valid for 20 minutes. Non-Swedish numbers are supported with the country code (e.g. `+32` for Belgium). Contact information – mobile number step This step is informational — continue. Privacy policy step Review the **Terms of use for Fortnox ID** and click **Accept**. Terms of use for Fortnox ID step Fortnox generates a one-time account-recovery code (used to regain access if you lose your mobile number). **Treat it as a sensitive credential** — store it in a password manager, never in shared documentation. Check the confirmation box and continue. Save recovery code step This step appears only if you skipped e-identification. Call Fortnox support at **0470-78 50 00** and ask them to verify your Fortnox ID. Without **BankID** or **Freja eID+**, this step **cannot be completed online** — verifying your Fortnox ID requires a phone call to Fortnox support. Fortnox acknowledges this gap for foreign citizens in its [customer-verification FAQ](https://support.fortnox.se/hantera-fortnox/abonnemang-och-avtal/faq-kundverifiering); there is currently no committed timeline for a self-service alternative. Contact support step showing the Fortnox support phone number Once your Fortnox ID is created and verified, go back to the original **activation email** and continue from there. This links your new Fortnox ID and finishes the sandbox registration. ## Test Fortnox Create up to **30 test companies** from the [Test environments](https://developer.fortnox.se/my-account/test-environments) tab of the Fortnox Developer Portal. Test companies behave like real Fortnox companies (same [rate limits](#rate-limits) apply), come with the standard **BAS** chart of accounts and no pre-filled data. ## Connect Fortnox To activate a connection with Fortnox, users will have to go through the following steps: * Help Center article: [Help Center - Fortnox EN](https://help.chift.app/articles/8379391627-fortnox?lang=en) ## Rate limits * **300 requests / minute** per Client ID + tenant (i.e. per access token), enforced via a **sliding window of 5 seconds** → **25 requests / 5 s**. * Exceeding the limit returns **HTTP 429 (Too Many Requests)**; bursts are throttled until the average falls back under the limit. * The limit scales per tenant: each connected Fortnox company has its own access token and therefore its own 300 req/min budget. ## Technical limitations & specificities * **Single company currency — SEK.** Fortnox accounts have no per-account currency. On a bank account, the currency is informational (surfaced in the account name), not enforced. On entries, a currency ≠ company currency requires an `exchange_rate` (otherwise `ERROR_CURRENCY_NOT_ALLOWED`), and amounts are converted to the company currency. * **Account & journal types are derived, not stored.** `journal_type` and ledger account type are derived from the BAS number ranges / predefined series. A type sent on create is not stored — it's ignored, or validated for consistency (an account type inconsistent with the number range is rejected). * **Third-party accounts (customer/supplier/employee) on entries.** Fortnox has no native journal ↔ account link and supplier objects carry no dedicated ledger account, so third-party lines must specify `force_general_account` (otherwise a clear "not supported" error is returned). * **Format constraints:** ledger account number = numeric, `1000–9999`; journal (VoucherSeries) code = 1–10 chars, digits / UPPERCASE only. * `posted` **is always** `true` for entries — Fortnox posts vouchers immediately (the `posted` input has no effect). * **Financial entries (bank/cash operations):** items contain only the counterpart line(s) with a signed amount (`+` = into the bank, `−` = out); the bank ledger account is passed via the mandatory query param `financial_counterpart_account`, and the connector adds the balancing bank line (net of the amounts). * **Chart-of-accounts type filter** exposes only 6 of the 10 possible account types (`bank`, `cash`, `income`, `expense`, `other_expense`, `vat`) — `receivable`, `payable`, `other_financial`, `other` are returned in responses but cannot be filtered. * **Bank account number range (1920–1999).** In the Swedish BAS chart of accounts, the range `1920–1999` is reserved for bank and cash accounts (*Kassa och bank*). Accounts created via `POST /accounting/bank-accounts` on the Fortnox connector will be allocated within this range. ## Coverage # FreeAgent Source: https://docs.chift.eu/connectors/accounting/freeagent ## Introduction FreeAgent is a comprehensive cloud-based accounting software designed primarily for freelancers, small businesses, and accountants in the UK and Europe. It provides a complete suite of financial management tools including invoicing, expense tracking, time tracking, project management, tax calculations, and detailed financial reporting. FreeAgent offers specialized features for UK tax compliance including VAT, Corporation Tax, and Self Assessment integration. ## Configure FreeAgent **Prerequisite(s)** * Create an OAuth2 application in your FreeAgent developer account * Clarity on whether the integration targets a single company or multiple client folders * Activate the FreeAgent integration on the Chift platform **Activation Process** **1. Create your FreeAgent application** Sign in to the [FreeAgent Developer Portal](https://dev.freeagent.com/) and register a new application. During registration: * Choose your connection type: * **Free Agent (single company)** – Direct connection to one specific company account. Suitable for individual businesses or single-company integrations. * **Practice Dashboard (multi-client)** – Designed for accountants managing multiple client folders. Allows centralized access to multiple client companies. **Note:** \ the chosen mode is exclusive; a Practice Dashboard app cannot connect single-company clients, and vice versa. * Configure the OAuth2 redirect URI: `https://chift.app/oauth2/redirect` * Select the environment: Sandbox (for testing) or Production (live data) * Copy your Client ID and Client Secret Once this is complete, your FreeAgent application is ready for use in Chift. **2. Activate the connector on Chift** In your Chift back office, open the FreeAgent connector and toggle activation. You will be prompted to: * Paste your Client ID and Client Secret * Select the Environment (Production or Sandbox) * Confirm the Connection Type (single company or Practice Dashboard) If using Practice Dashboard, you will later be able to select which client folders to grant access to. ## Test FreeAgent FreeAgent provides both sandbox and production environments for testing: * **Sandbox Environment**: Full-featured testing environment with sample data * **Production Environment**: Live environment for real business data For accountants using Practice Dashboard, multiple client scenarios can be tested in either environment. Before going live, validate: * OAuth authentication * Invoice creation * Data synchronization ## Connect FreeAgent To activate a connection with FreeAgent, users will have to go through the following steps: * English article: [Help Center - FreeAgent EN](https://help.chift.app/articles/6982450548-freeagent?lang=en) ## Technical Limitations **Connection Types** To connect to FreeAgent you need to choose between one of those connection modes: * **Free Agent**: Direct connection to a single company * **Practice Dashboard**: Multi-client connection for accountants (requires folder selection) **Invoice Creation Restrictions** * Customer invoice creation supports both draft and posted statuses * Foreign currency invoices with future dates cannot be automatically posted ## Rate limits The FreeAgent API enforces the following limits **per user**: * **120 requests per minute** * **3,600 requests per hour** * **15 token refreshes per minute** Documentation (FreeAgent dev):\ [https://dev.freeagent.com/docs/introduction](https://dev.freeagent.com/docs/introduction) ## Coverage ## Troubleshooting ### Specific errors for FreeAgent: | Error Code | Error description | Resolution | | ------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | | ERROR\_INVALID\_ANALYTIC\_DISTRIBUTION | Using multiple analytic accounts in a single invoice is not allowed in FreeAgent. | Use only one analytic account per invoice. | | ERROR\_FREEAGENT\_BANK\_TRANSACTION\_ALREADY\_EXPLAINED | The bank transaction has already been explained in FreeAgent (potential duplicate detected). | Verify the transaction has not already been processed in FreeAgent. | | ERROR\_INVALID\_BODY | FreeAgent does not support invoices dated in the future that use foreign currency. | Use the current or past date for foreign currency invoices. | | ERROR\_CURRENCY\_NOT\_ALLOWED | For FreeAgent, a foreign exchange rate must be specified and must not be equal to 0 or 1. | Provide a valid exchange rate different from 0 and 1 for foreign currency journal entries. | | ERROR\_FREEAGENT\_MATCHING\_MIXED\_ENTITY\_TYPES | Cannot mix different document types (invoices, bills, bank transactions) in a single matching request. | Use separate matching requests for different document types. | | ERROR\_FREEAGENT\_MATCHING\_MULTIPLE | FreeAgent doesn't support matching multiple bank transactions with multiple invoices/bills in a single request. | Split the matching into separate requests. | | ERROR\_FREEAGENT\_MATCHING\_NO\_TRANSACTIONS | At least one bank transaction must be included in the entries to match. | Include at least one bank transaction in the matching request. | | ERROR\_FREEAGENT\_MATCHING\_UNSUPPORTED\_ENTITY | Only sale invoices/refunds, purchase invoices/refunds, and bank transactions are accepted in matching requests. | Use only supported document types in matching requests. | # Fulll Source: https://docs.chift.eu/connectors/accounting/fulll ## Introduction Fulll is an accounting software designed to streamline financial management for small to medium-sized businesses, offering features such as automated bookkeeping, invoicing, expense tracking, and financial reporting. ## Configure Fulll **Prerequisite(s)** * Obtain a client ID and Secret for a Fulll partner account with an OAuth2 application enabled. * Activate the Fulll integration on the Chift platform. **Activation Process** Upon request Chift will introduce you and request Fulll for your dedicated partner account and Oauth2 application to be created. Specify it in your request if you wish to have dummy data to be into your account for testing purposes. ## Test Fulll To test the software integration, you can use the partner account created previously. Check with Fulll if they can also inject dummy data into your sandbox account. ## Connect Fulll To activate a connection with Fulll, users will have to go through the following steps. * French article: [Help Center - Fulll FR](https://help.chift.app/articles/6036788417-fulll?lang=fr) * English article: [Help Center - Fulll EN](https://help.chift.app/articles/6036788417-fulll?lang=en) ## Coverage ## Troubleshooting ### Specific errors for Fulll: | Error Code | Error description | Resolution | | ---------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | | ERROR\_ACCOUNT\_NUMBER\_NOT\_GOOD\_SCOPE | Collective general ledger accounts cannot be used to book journal entries in Fulll. | Use a thirdparty account instead of a collective general ledger account. | | ERROR\_IMPORT\_FAILED | The asynchronous import job returned an unknown error. | Retry the request. If the error persists, contact Chift support. | # Holded Source: https://docs.chift.eu/connectors/accounting/holded ## Introduction Holded is a cloud-based accounting solution designed to simplify invoicing, expense tracking, and financial reporting for small and medium-sized businesses. ## Configure Holded **Prerequisite(s)** There is no prerequisite to enable Holded on your Chift APP. **Activation Process** Activate the Holded integration on the Chift platform. ## Test Holded To test the software integration, you can create a free trial account [here](https://app.holded.com/signup?lang=en) ## Connect Holded To activate a connection with Holded, users will have to go through the following steps. * Spanish article: [Help Center - Holded ES](https://help.chift.app/articles/5254978461-holded?lang=es) * English article: [Help Center - Holded EN](https://help.chift.app/articles/5254978461-holded?lang=en) ## Coverage ### Specific errors for Holded: | Error Code | Error description | Resolution | | ------------------------------------ | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | | ERROR\_PARTNER\_NOT\_CONFIGURED | The client/supplier 'XXX' is not linked to an account. | Configure the client/supplier accordingly. | | ERROR\_UNSUPPORTED\_BODY | Holded requires the account\_number to be exactly 4 digits (prefix), the full account number is then returned. | Only provide a 4-digit prefix as account number, full account number can only be set through their interface. | | ERROR\_UNSUPPORTED\_BODY | The account number prefix is invalid. | The account number prefix does not exist in the system's chart of accounts. | | ERROR\_UNSUPPORTED\_QUERY\_PARAMETER | Unsupported entry line type 'line\_type'. | N/A | | ERROR\_UNSUPPORTED\_BODY | Holded does not support journal of types 'journal\_type'. | N/A | | ERROR\_UNSUPPORTED\_QUERY\_PARAMETER | Attachments are only retrievable for invoices. | N/A | | ERROR\_UNSUPPORTED\_QUERY\_PARAMETER | Can not retrieve account balances for periods greater than a year. | N/A | # Horus Source: https://docs.chift.eu/connectors/accounting/horus ## Introduction Horus is an accounting software based on new technologies, designed with and for digital technology. It simplifies your work considerably, you save time on a daily basis and you follow your figures in real time. Deliver the Horus integration your customers want in no time. ## Configure Horus **Prerequisite(s)** * ️ obtain a “Client ID” and “Client Secret” * ️ get an OAuth2 application for your partner account. * Activate the Horus integration on the Chift platform. **Activation Process** * send an email to [developer@horus-software.be](mailto:developer@horus-software.be) to ask for your Client ID and Client Secret that will be used for all your customers. Provide the following information when requesting the Client ID and Client Secret: * name of the integration * contact person & email address * short description of how (= using Chift) and why you intend to use the API * redirect Url: [https://chift.app/oauth2/redirect](https://chift.app/oauth2/redirect) ## Test Horus To test the software integration, ask Chift to contact and request Horus for a sandbox account on your behalf. ## Connect Horus To activate a connection with Horus, users will have to go through the following steps. * French article: [Help Center - Horus FR](https://help.chift.app/articles/2823105645-horus?lang=fr) * English article: [Help Center - Horus EN](https://help.chift.app/articles/2823105645-horus?lang=en) ## Coverage ## Troubleshooting ### Specific errors for Horus: | Error Code | Error description | Resolution | | ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | | ERROR\_ANALYTIC\_ACCOUNT\_NOT\_CONFIGURED | The ledger account is not configured correctly to be used with the analytic plan/account. | Configure the ledger account to support the analytic plan/account in Horus. | | ERROR\_COMPANY\_NAME\_ALREADY\_USED | Horus has a uniqueness constraint on the client/supplier name. | Use a unique name for the client/supplier. | | ERROR\_CURRENCY\_NOT\_ALLOWED | You can only create financial entries in EUR in Horus. An exchange rate must be provided for other currencies. | Use EUR as the currency or configure foreign currency handling in Horus. | | ERROR\_INVALID\_DUE\_DATE | The invoice due date must be on or after the invoice date. | Ensure the due date is equal to or later than the invoice date. | | ERROR\_INVALID\_FIELD\_FORMAT\_BANK\_ACCOUNT | Horus only accepts valid IBANs. | Provide a valid IBAN. | | ERROR\_INVALID\_FIELD\_FORMAT\_INVOICE\_NUMBER | The invoice number can only contain numbers in Horus. | Use only numeric characters for the invoice number. | | ERROR\_INVALID\_FIELD\_FORMAT\_NUMBER | The entry number is too long in Horus. | Shorten the entry number. | | ERROR\_INVALID\_FIELD\_FORMAT\_OPERATION\_NUMBER | The operation number can only contain numbers in Horus. | Use only numeric characters for the operation number. | | ERROR\_MISSING\_INVOICE\_NUMBER | An invoice number is required in Horus. | Provide an invoice number. | # Inqom Source: https://docs.chift.eu/connectors/accounting/inqom # Introduction Inqom is a French cloud-based accounting software that leverages artificial intelligence to automate and optimize accounting processes. It offers features such as real-time bookkeeping, automated data entry, and financial reporting, designed to enhance the efficiency and accuracy of accounting tasks. The software is part of the Visma ecosystem. ## Configure Inqom **Prerequisite(s)** * Obtain Inqom’s approval to use Chift’s Partner Key * Activate the Inqom integration on the Chift platform. **Activation Process** Upon request, Chift can request Inqom’s approval and encoding Chift’s generic API keys in your Chift account. ## Test Inqom To test the software integration, Chift can request or share a test account. ## Connect Inqom To activate a connection with Inqom, users will have to go through the following steps. * French article: [Help Center - Inqom FR](https://help.chift.app/articles/1602400380-inqom?lang=fr) * English article: [Help Center - Inqom EN](https://help.chift.app/articles/1602400380-inqom?lang=en) ## Coverage ## Troubleshooting ### Specific errors for Inqom: | Error Code | Error description | Resolution | | ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | | UNEXPECTED\_INQOM\_ERROR | This file MimeType is not allowed! | Notify Chift if error observed | | UNEXPECTED\_INQOM\_ERROR | Account XXX cannot be created : parent account XXX is not dividable | Please check account setup in accounting system | | ERROR\_PARTNER\_ALREADY\_EXISTS | Account XXX already exists in PCG | You cannot create an account with the same partner\_id as an existing account | | ERROR\_ACCOUNT\_NUMBER\_NOT\_GOOD\_SCOPE | Some ledger accounts cannot be used in ledger entries in Inqom. The account is not 'imputable' or the relative root account is not 'dividable'. | Use an imputable ledger account, or configure the root account as dividable in Inqom. | | ERROR\_ZERO\_INVOICE | Inqom doesn't accept invoices where all lines have an amount of 0. | Ensure at least one invoice line has a non-zero amount. | | ERROR\_INQOM\_ENTRY\_FORMAT | Inqom expects at least one item with debit or credit in the entry. | Ensure the entry has at least one line with a debit or credit amount. | # Lexware Office Source: https://docs.chift.eu/connectors/accounting/lexoffice ## Introduction Lexoffice is a German cloud-based accounting solution designed for the German market that helps businesses manage invoices, contacts, and financial documents. ## Configure Lexoffice **Prerequisite(s)** * No prerequisite to enable Lexoffice. Chift supports only the public API. * The public API has the limitation that it's only available for end-users having the XL plan. **Activation Process** * Activate the Lexoffice integration on the Chift platform. ## Test Lexoffice To sign up for a new company, visit [https://app.lexware.de/signup](https://app.lexware.de/signup) and click on "Kostenlos registrieren".\ The signup only requires email and password.\ The created account can be used free within 30 days and has all available features. You can create as many accounts as you need. ## Connect Lexoffice To activate a connection with Lexoffice, users will have to go through the following steps: * French article: [Help Center - Lexoffice EN](https://help.chift.app/articles/6563737155-lexware-office-lexoffice) ## Technical Limitations ## Rate Limiting Lexoffice API has standard rate limits to ensure fair usage across all applications. These limits are automatically managed by Chift to optimize performance and prevent interruptions. However, once the API rate limit is reached, Chift cannot bypass these limitations and requests will need to wait until the limit resets. For high-volume operations, it's recommended to plan accordingly and distribute requests over time. See more information [here](https://developers.lexware.io/docs/#api-rate-limits) ## Coverage ## Troubleshooting ### Specific errors for Lexoffice: | Error Code | Error description | Resolution | | ------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------- | | ERROR\_INVALID\_BODY | Lexoffice validates the provided VAT number format. | Provide a valid VAT number. | | ERROR\_INVALID\_PARAMETER | The search parameter must be between 3 and 128 characters. | Adjust the search parameter to be between 3 and 128 characters. | # Minox Source: https://docs.chift.eu/connectors/accounting/minox ## Introduction Minox offers innovative cloud accounting software to SME's and accounting firms. The key strengths are robotic accounting, superior UX and flexible collaboration to provide an intuitive and automated accounting processing. ## Configure Minox **Prerequisite(s)** * ️ Obtain a Client ID and Secret from Minox * ️ Get an Oauth2 application for your Minox account. **Activation Process** 1. Create your account - [here](https://www.minox.nl/) 2. Request for an Oauth2 application - [here](https://app.minox.nl/request) ## Test Minox To test the software integration, you can use the account you created during the configuration steps. ## Connect Minox To activate a connection with Minox, users will have to go through the following steps. * French article: [Help Center - Minox FR](https://help.chift.app/articles/8683169543-minox?lang=fr) * English article: [Help Center - Minox EN](https://help.chift.app/articles/8683169543-minox?lang=en) ## Coverage ## Troubleshooting ### Specific errors for Minox: | Error Code | Error description | Resolution | | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | | ERROR\_ACCOUNT\_NUMBER\_CONFIGURATION | Ledger accounts can only be used with configured VAT codes in Minox. | Configure the correct VAT codes on the ledger account in Minox. | | ERROR\_ACCOUNT\_NUMBER\_NOT\_GOOD\_SCOPE | Summary/aggregation ledger accounts cannot be used in bookings/invoices in Minox. | Use a detail (non-summary) ledger account. | | ERROR\_INVALID\_FIELD\_FORMAT\_BANK\_ACCOUNT | Minox only accepts valid IBANs. | Provide a valid IBAN. | | ERROR\_INVALID\_FIELD\_FORMAT\_NUMBER | The entry 'number' can only contain numbers in Minox. | Use only numeric characters for the entry number. | | ERROR\_INVALID\_PAYMENT\_TERM\_SPLIT | Minox only accepts valid IBANs in the payment terms. | Provide valid IBANs in the payment terms. | | ERROR\_PARTNER\_NOT\_GOOD\_SCOPE | Clients cannot be used in purchase journals, suppliers cannot be used in sales journals, or the partner is blocked for this specific journal. | Use the correct partner type for the journal (client for sales, supplier for purchases). | # Moneybird Source: https://docs.chift.eu/connectors/accounting/moneybird ## Introduction Stress-free bookkeeping. Moneybird has all the features you need for your financial administration. You choose what you need and how smartly you want to automate it: from sending invoices with ease to fully integrating your webshop and payments. ## Configure Moneybird **Prerequisite(s)** You will have to create a Moneybird developer account as well as an Oauth2 application. To do so, you will need to: * Create a moneybird developer account * Create an oauth2 application **Activation Process** 1. Create a Moneybird account: [Create account](https://www.moneybird.com/aanmelden/) \\ 2. Create your Moneybird sandbox account:
[Create sandbox administration](https://moneybird.com/login?redirect_to=%2Fadministrations%2Fsandboxes%2Fnew)\\ 3. Set up your Oauth2 application by creating a new application [here](https://moneybird.com/user/applications/new) * Enter the name of your app * Enter the callback URL (Chift): [https://chift.app/oauth2/redirect](https://chift.app/oauth2/redirect) * Click on "Save" Moneybird See as well the official Moneybird documentation [here](https://developer.moneybird.com/introduction) 4. Go to your account, connectors menu and activate Moneybird in one click. Then, you will be asked to provide your Moneybird client ID & secret. 5. Most of the scopes are mandatory. The "bank" scope can be added as well depending on your use case (using bank endpoints). ## Test Moneybird To test the software integration, you can use the sandbox account you created during the configuration process (step 2). You can create multiple sandbox accounts for free if needed. ## Connect Moneybird To activate a connection with Moneybird, users will have to go through the following steps. * French article: [Help Center - Moneybird - FR](https://help.chift.app/articles/5590047986-moneybird?lang=fr) * English article: [Help Center - Moneybird - EN](https://help.chift.app/articles/5590047986-moneybird?lang=en) ## Rate limits The Moneybird API throttles requests on a **per IP-address basis**: * **150 requests per 5 minutes** across all endpoints. * **50 requests per 5 minutes** for the stricter `/reports/` endpoints. When the limit is exceeded, the API responds with a **429 Too many requests** error. For short-term rate limits, Chift automatically retries the request to maximize the success rate. More details: [https://docs.chift.eu/developer-guides/rate-limits](https://docs.chift.eu/developer-guides/rate-limits) Partners with popular OAuth applications can request a **per-administration limit** instead of IP-based limits, and volume-based agreements are possible for high-volume accounts — both require contacting Moneybird support directly. More details: [developer.moneybird.com/introduction#throttling](https://developer.moneybird.com/introduction#throttling) ## Coverage ## Troubleshooting ### Specific errors for Moneybird: | Error Code | Error description | Resolution | | ------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | | ERROR\_INVALID\_BODY | The provided email does not fit the required format, or the external transaction ID must be unique in Moneybird. | Provide a valid email address and ensure external transaction IDs are unique. | | ERROR\_MISSING\_INVOICE\_NUMBER | An invoice number is required when creating an entry in Moneybird. | Provide an invoice number. | # MyUnisoft Source: https://docs.chift.eu/connectors/accounting/myunisoft ## Introduction MyUnisoft offers a B2B2C solution for accountants, including features such as automated accounting production, a collaborative client platform and a firm platform (CRM, internal management, etc.). Deliver the MyUnisoft integration your customers want in no time. ## Configure MyUnisoft **Prerequisite(s)** * Get listed as a technology partner of MyUnisoft (link to the partner page) * Obtain a X-Third-Party Key from MyUnisoft **Activation Process** 1. Ask Chift for the point of contact. 2. Let them know that you are connected to Chift's Unified API - Accounting and wish to become partners and set up the API connection with MyUnisoft. * Exchange Marketing information (logo, descriptions, etc.) * Collect your X-Third-Party Key (to encode your X-Third-Party Key: it is one unique partner key in both staging and production environments) ## Test MyUnisoft We can provide you with your own test account, which includes dummy data, through our partnership with MyUnisoft. Alongside, we will provide you with our Chift API key directly in your connector configuration within the sandbox environment of your Chift platform. Once this is set up, you can access your test environment and select **Chift** from the list of applications to integrate. This generates the token required to activate your new connection (further explained in the ***Connect MyUnisoft*** section below). ## Connect MyUnisoft To activate a connection with MyUnisoft, users must go through the following steps. * French article: [Help Center - MyUnisoft FR](https://help.chift.app/articles/7397218254-myunisoft?lang=fr) * English article: [Help Center - MyUnisoft EN](https://help.chift.app/articles/7397218254-myunisoft?lang=en) ## Rate limits The MyUnisoft API limits requests per API token: * 20 requests per 10 seconds (default) * Maximum 10 concurrent requests per endpoint Some import/export endpoints may count multiple requests to prevent abuse. ## Coverage ## Troubleshooting ### Specific errors for MyUnisoft | Error Code | Error description | Resolution | | ---------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | | ERROR\_BOOKYEAR\_CLOSED | Impossible de saisir dans un exercice cloturé | The fiscal year is closed, it must be reopened or the start date of the synchronization must be adapted accordingly | | ERROR\_BOOKYEAR\_NOT\_FOUND | No fiscal year has been setup for the current date. Please setup a fiscal year to retrieve the chart of accounts | Setup a fiscal year for the current date. | | ERROR\_ACCOUNT\_NUMBER\_NOT\_ACTIVE | Le compte "XXX" est fermé | Activate the ledger account in the accounting system | | ERROR\_ANALYTIC\_ACCOUNT\_NOT\_CONFIGURED | The ledger accounts and analytic accounts must be set up correctly to be used together in MyUnisoft. | Configure the analytic account and ledger account in MyUnisoft. | | ERROR\_INVALID\_BODY | A comment that is too long was provided. | Shorten the comment field to fit within MyUnisoft's limits. | | ERROR\_INVALID\_FIELD\_FORMAT\_INVOICE\_NUMBER | The invoice number has a maximal length of 15 characters in MyUnisoft. | Shorten the invoice number to 15 characters or fewer. | | ERROR\_INVALID\_FIELD\_FORMAT\_NUMBER | The entry number has a maximal length of 15 characters in MyUnisoft. | Shorten the entry number to 15 characters or fewer. | | ERROR\_MISSING\_NUMBER | The entry number is required in MyUnisoft. | Provide an entry number. | | ERROR\_MISSING\_INVOICE\_NUMBER | The invoice number is required in MyUnisoft. | Provide an invoice number. | | ERROR\_TAX\_CODE\_NOT\_CONFIGURED | The VAT ledger accounts are not set up correctly for deducting VAT from invoices in MyUnisoft. | Configure the VAT ledger accounts on the tax code in the accounting system. | # Netsuite Source: https://docs.chift.eu/connectors/accounting/netsuite ## Introduction NetSuite is the leading integrated cloud business software suite, including business accounting, ERP, CRM and ecommerce software. An AI-powered business management suite, encompassing ERP/Financials, CRM, and ecommerce for more than 41,000 customers. ## Configure NetSuite **Prerequisite(s)** There's no prerequisite to activate the connector on your Chift App.
Your end users connect their NetSuite account by installing the **Chift Integration Bundle** (see the [Chift Integration Bundle](#chift-integration-bundle) section) — no API keys, Client ID, or Secret to obtain. **Activation Process** Activate the connector in one click on the connector section in your Chift account. **Set up** A few NetSuite behaviours are controlled by **connector-level preconfigure fields** in your Chift account (**Connectors → NetSuite → Preconfigure fields**). A value set here applies to **all** your NetSuite connections and is **hidden from your end users** — configure them once, based on the capabilities you need. Each field defaults to **inactive**.
Image | Field | What it does | Set to *active* when… | | --------------------- | ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Invoice products** | Adds sellable products into the chart of accounts so they can be used on **customer invoice lines**. | You create **customer (sales) invoices**. If left inactive, customer invoices are not supported for the connection — only supplier invoices. | | **Attachments** | Enables pushing attachments to NetSuite. | You push attachments. Requires the Chift Integration Bundle (the RESTlet it installs); Chift verifies it is present when a connection is created. | | **Bank transactions** | Enables pushing bank transactions to NetSuite. | You push bank transactions. Requires the **ZoneReconcile (Zone & Co)** SuiteApp on the account (see [Limitations](#limitations)); Chift checks for it when a connection is created. | Leave a capability inactive if you don't use it. Enabling **Attachments** or **Bank transactions** makes Chift check, at connection time, that the required bundle RESTlet / ZoneReconcile SuiteApp is installed — so only enable them once those prerequisites are in place. ## Test NetSuite A sandbox environment is available from NetSuite, but only for customers with an active NetSuite subscription. It is typically priced at **\~10–20% of the annual subscription cost**. In practice, the recommended approach is to partner with **beta clients or partners who already have NetSuite access** and can provide a test environment for integration testing. ## Connect NetSuite Your end users connect their NetSuite account by installing the **Chift Integration Bundle** in NetSuite, assigning the bundled role, and authorizing in Chift. For the detailed step-by-step guide, check out the documentation: * [Connect NetSuite – English](https://help.chift.app/articles/4463201464-netsuite?lang=en) * [Connecter NetSuite – Français](https://help.chift.app/articles/4463201464-netsuite?lang=fr) See the following paragraph about the Chift Integration Bundle that end users install. ## Chift Integration Bundle Chift connects to NetSuite through a **SuiteBundle** that your end users install in their NetSuite account in one click. The bundle delivers everything the connector needs — no file uploads, no manual script configuration, and no copying of a Client ID or Secret. It **does not modify the native behavior of NetSuite**; it packages the objects Chift needs to read and write data. ### What the bundle delivers * A **RESTlet** script and deployment — powers attachments and bank transactions, which NetSuite's native REST API cannot handle. * Two ready-to-assign **custom roles** — **`Chift Integration`** (full read + write) and **`Chift Integration (Read Only)`** (read-only). See the Roles & permissions section below. * The **OAuth 2.0 integration record** — installs already **enabled**, with Chift's OAuth app embedded. Your end users never see or enter a Client ID or Secret. * A **`Chift Attachments`** File Cabinet folder — the default target for stored attachments (overridable in Chift's post-connection settings). ### End-user onboarding Installing and connecting the bundle is a four-step process for the NetSuite administrator: **enable SuiteCloud features → install the bundle → assign a role to the connecting user → authorize in Chift** (only the NetSuite account ID is required). The full step-by-step guide lives in the [Help Center article](https://help.chift.app/articles/4463201464-netsuite?lang=en). The connection runs with the role the user authorizes with. End users can connect with one of the bundled roles or their own scoped role — see the Roles & permissions section below. After assigning or changing a role, the user must **log out and back in** for it to appear at the consent screen. ### Compatibility & requirements * **Attachments** and all standard accounting endpoints work over the single OAuth 2.0 token — there is no separate token-based-authentication step. * **Bank transactions** require the third-party **ZoneReconcile (Zone & Co)** SuiteApp to be installed (see Limitations). * **OneWorld (multi-subsidiary) accounts**: the role ships with Subsidiary Restrictions set to **All** so the connector can see every subsidiary. Restricting it to *User Subsidiary* (or disabling *Include Sub-Subsidiaries*) hides child subsidiaries from Chift. * **Custom segments used as analytic dimensions**: enable the SuiteCloud **Custom Segments** feature and grant the matching permission on the role, otherwise analytic dimensions silently return empty. ### Roles & permissions The connection runs with **whatever role the end user authorizes with**, so that role determines how much access Chift has. NetSuite enforces the access itself — the bundle's RESTlet accepts any role — so end users can pick the option that fits their security requirements: * **`Chift Integration` (read + write)** — the bundled role for full read/write access. Use it when Chift needs to create data (invoices, journal entries, bank transactions, attachments, …). * **`Chift Integration (Read Only)`** — the bundled role for read-only access. Use it when Chift only reads data. * **Your own role** — end users can connect with an existing or custom NetSuite role scoped to their needs, granting only the permissions the Chift features they use actually require. A per-feature endpoint→permission mapping table will document exactly what to enable *(coming soon)*. Avoid connecting as **Administrator** — the connection would then run with full administrator access instead of a scoped role. Choose the bundled role (or a scoped custom role) that matches the access you actually need. ## Limitations ### `POST invoices/payments` **([Create an invoice payment](https://docs.chift.eu/api-reference/endpoints/accounting/create-an-invoice-payment)):** Payment method must be linked to a ledger account A payment method must be linked to a ledger account in NetSuite to be used in an invoice payment. This configuration is done at the payment method level in NetSuite — you will have to make sure each payment method you intend to use for invoice payments has a ledger account assigned. An error will be thrown if this is not the case. ### Bank transactions require the ZoneReconcile SuiteApp Bank-statement and transaction records are **not** part of the Chift bundle — they are owned by the third-party **ZoneReconcile (Zone & Co)** reconciliation SuiteApp. Creating bank transactions therefore requires ZoneReconcile to be installed on the NetSuite account, with the `Chift Integration` role granted **Full** access to its bank record types (`customrecord_bank_statement`, `customrecord_ba_transactions`) and **Lists → Perform Search**. Attachments and all standard accounting endpoints do not depend on this. ## Coverage ## Troubleshooting ### Specific errors for NetSuite: | Error Code | Error description | Resolution | | ---------------------------------------------- | ------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------- | | ERROR\_ACCOUNT\_TYPE\_NOT\_ALLOWED | Only general accounts can be used when creating journal entries in NetSuite. | Use general accounts for journal entries. | | ERROR\_CUSTOMER\_INVOICE\_TYPE\_NOT\_SUPPORTED | Customer invoices are not supported in this NetSuite connection. | Use supplier invoice types instead. | | ERROR\_INVALID\_TRANSACTION\_DATE | Transaction dates may be at most 30 years in the past and 10 years in the future. | Use a transaction date within the allowed range. | | ERROR\_JOURNAL\_ID\_NOT\_AUTHORIZED | Only journal\_id 3 and 4 are authorized for this connection to create sales or purchase entries. | Use the correct journal\_id for sales/purchase entries, or use the create journal entry endpoint for other journals. | # Octopus Source: https://docs.chift.eu/connectors/accounting/octopus ## Introduction Accounting software that allows accounting operations such as bookkeeping, customer and supplier invoices, VAT management, bank reconciliations, inventory management, financial reporting and many others. Deliver the Octopus integration your customers want in no time. ## Configure Octopus **Prerequisite(s)** No prerequisite to enable the connector. **Activation Process** Activate the connector in one click on the connector section in your Chift account. ## Test Octopus To test the software integration, you can create your Octopus demo account [here](https://www.octopus.be/nl/demo/) ## Connect Octopus To activate a connection with Octopus, users will have to go through the following steps. * English article: [Help Center - Octopus EN](https://help.chift.app/articles/4088942499-octopus?lang=en) ## Coverage ## Troubleshooting ### Specific errors for Octopus: | Error Code | Error description | Resolution | | ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | | ERROR\_ACCOUNT\_NUMBER\_NOT\_ALLOWED | The provided account number cannot be used for this type of journal in Octopus. | Use an account number that is compatible with the journal type. | | ERROR\_BACKEND\_FORBIDDEN | Impossible to retrieve data due to a permission issue in Octopus. | Verify the user has the correct permissions in Octopus. | | ERROR\_INVOICE\_NUMBER\_NOT\_ACCEPTED | Invoice numbers must follow the strict sequence defined on the journal. When not following the sequence, the invoice number is sent as a reference. | Use an invoice number that follows the journal sequence in Octopus. | | ERROR\_JOURNAL\_ALREADY\_OPEN | It is not possible to add entries in the journal if it is currently being used in Octopus. | Close the journal in the Octopus interface before pushing data. | | ERROR\_TAX\_CODE\_NOT\_CONFIGURED | The tax code is not configured for the correct scope of invoice type in Octopus. | Configure the tax code for the appropriate invoice type in Octopus. | # Odoo (Accounting) Source: https://docs.chift.eu/connectors/accounting/odoo-accounting ## Introduction Odoo Accounting module is a software that tracks your accounting & finances with utmost accuracy. It helps you fulfill all your accounting needs like payments and invoices, bank reconciliations, reports and much more. Deliver the Odoo integration your customer wants in no time. ## Configure Odoo **Prerequisite(s)** No prerequisite to enable the connector. **Activation Process** Activate the connector in one click on the connector section in your Chift account. ## Test Odoo To test the software integration, you can create an Odoo account [here](https://www.odoo.com/trial). (You need to get a free trial on the plan named “Personnalisé” to benefit from the API.) ## Connect Odoo To activate a connection with Odoo, users will have to go through the following steps. * French article: [Help Center - Odoo Comptabilité FR](https://help.chift.app/articles/7508001423-odoo?lang=fr) * English article: [Help Center - Odoo Accounting EN](https://help.chift.app/articles/7508001423-odoo?lang=en) ## Technical limitations **Important – Odoo integration constraints** The connector does not take into account customisations made at the end-customer level in Odoo. Make sure the end-customer has not introduced additional business constraints or modifications that deviate from the standard Odoo data model. Such customizations can conflict with the standard behavior and potentially break or block the connector. For any specific business requirement, first validate whether Odoo supports it natively or whether a product-level adjustment is required before implementing a workaround. ## Coverage \*Match entries (PDF): Only available after Odoo 12 \*Attach a document (PDF): Only available after Odoo 12 ## Troubleshooting ### Specific errors for Odoo: | Error Code | Error description | Resolution | | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- | | ERROR\_ACCOUNT\_NUMBER\_NOT\_GOOD\_SCOPE | The account number cannot be used in this scope. Partner account items must use the correct account type (customer/supplier/employee account matching the partner type). | Use the correct account type for the partner type (customer account for clients, supplier account for suppliers). | | ERROR\_BANK\_ACCOUNT\_ALREADY\_EXISTS | The combination of account number and partner must be unique in Odoo. | Check for an existing account with the same number before creating a new one. | | ERROR\_EMPLOYEE\_NOT\_CONFIGURED | Employees must be linked to a contact in Odoo to be used in entries. | Link the employee to a contact in Odoo. | | ERROR\_JOURNAL\_NOT\_CONFIGURED | The journal is not linked to a bank/cash ledger account. | Link a bank or cash ledger account to the journal in Odoo. | | ERROR\_ODOO\_UNSUPPORTED | Odoo is only supported from version 12 onwards. | Upgrade Odoo to version 12 or later. | | ERROR\_RESOURCE\_NOT\_SUPPORTED | Certain features (PDF attachments, matching) require Odoo version 13 or later. The HR module is required for employee management. | Upgrade Odoo to the required version or enable the required module. | # Accounting Connectors Overview Source: https://docs.chift.eu/connectors/accounting/overview # Pennylane Source: https://docs.chift.eu/connectors/accounting/pennylane # Introduction Pennylane centralizes in real time all the financial flows of companies and facilitates the collaboration between managers and their accountant. Deliver the Pennylane integration your customers want in no time. ## Configure Pennylane Sandbox and production credentials are identical on Pennylane's side. Before going live, your integration must be certified by both Chift and Pennylane (see Step 3). Follow the steps below to get sandbox access, retrieve your OAuth2 credentials, and go live. Chift can assist you with each step. ### Step 1: Open the partnership & get sandbox access Fill in the [partnership form](https://www.notion.so/23b2276c03bf8059a59dcb775b546a96?pvs=21): * **Question 4** — Which entity will be responsible for developing the connector? Select **Chift**. * **Question 5** — Do you have access to the Pennylane sandbox? Select **No, open access for me**. Question 5b will then appear; enter the email address to associate with the sandbox. By default, Pennylane provides sandboxes **without the accounting module**. Once you're connected to your sandbox, notify Chift so we can ask Pennylane to activate it for you. ### Step 2: Get your OAuth2 credentials Fill in the [OAuth2 request form](https://form.typeform.com/to/Vn0iWTJv) to receive your **Client ID** and **Client Secret**. ### Step 3: Go live — certify your integration Fill in the [pre-certification form](https://www.notion.so/23e2276c03bf80bc9704c06e99cd059c?pvs=21), then ask Chift to schedule a meeting with Pennylane. During this meeting you'll: * Present an internal demo of your integration to Pennylane. * Have Chift on the call to answer any technical questions. ### Step 4: Publish on Pennylane's marketplace & in-app To appear on Pennylane's public marketplace and in-app, and to benefit from their communication around your partnership, fill in the [app-listing form](https://www.notion.so/2402276c03bf80eea025ffdd8d1b214a?pvs=21). ## Test Pennylane You will receive sandbox access directly after filling in the partnership form from *Step 1*. Don't forget to reach out to your Chift point of contact to activate the Accounting module. ## Connect Pennylane To activate a connection with Pennylane, users will have to go through the following steps. French article: [Help Center - Pennylane FR](https://help.chift.app/articles/9277286785-pennylane?lang=fr) English article: [Help Center - Pennylane EN](https://help.chift.app/articles/9277286785-pennylane?lang=en) ## Rate limits Pennylane enforces rate limits on **both production and sandbox** environments, applied **at the token level** (per OAuth-generated token, or per developer token). * **25 requests every 5 seconds** per token. For details, see the [Pennylane API v2 rate limiting documentation](https://pennylane.readme.io/docs/rate-limiting-1). ## Technical limitation Endpoints related to invoice retrieval for Pennylane are subject to a technical limitation concerning associated payments. Pennylane’s API does not expose detailed payment records for an invoice. As a result, the payment information returned consists of a single aggregated payment, where the amount corresponds to the total paid and the payment date is set to the invoice’s due date. ## Coverage ## Troubleshooting ### Specific errors for Pennylane: | Error Code | Error description | Resolution | | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ERROR\_SUPPLIER\_INVOICE\_PDF\_REQUIRED | PDFs are mandatory for invoices on Pennylane. |
  1. Make sure that each invoice has an attachment.
  2. If you are using the sync option, block the option to create an invoice when no PDF is attached to the invoice.
| | ERROR\_CONNECTOR\_AUTHENTICATION | The token used to connect to Pennylane is not valid anymore. | Reconnect Pennylane to your existing consumer to generate a new authentication token. | | ERROR\_BOOKYEAR\_NOT\_FOUND | The accounting system is not set up for this date. | Create a fiscal year in the accounting system including the date of the invoice. | | ERROR\_BOOKYEAR\_CLOSED | The bookyear/fiscal year is already closed in the accounting system | The fiscal year is closed, it must be reopened or the start date of the synchronization must be adapted accordingly. | | ERROR\_INVOICE\_NUMBER\_ALREADY\_USED | The sent invoice number is already attributed to an existing invoice in Pennylane | Invoice seems to be already imported in Pennylane through another synchronization. Please contact the customer to see how this is possible. | | UNEXPECTED\_PENNYLANE\_ERROR | The pdf received already exists in the application on another invoice | Invoice seems to be already imported in Pennylane through another synchronization. Please contact the customer to see how this is possible. | | UNEXPECTED\_PENNYLANE\_ERROR | It’s not possible to create any more invoices on that folder | Account is not active anymore or blocked. Contact the customer to see if the account is still active + if date is not in a closed book/fiscal year. | | UNEXPECTED\_PENNYLANE\_ERROR | Invoice lines quantity must be different than 0, Accounting frozen until Given Date (e.g., "Invoice lines quantity doit être différent de 0, La comptabilité est figée jusqu’au 30 septembre 2024") | Please unfreeze accounting/books on Pennylane. | | UNEXPECTED\_PENNYLANE\_ERROR | Invoice lines quantity must be different than 0 | Pennylane API doesn’t allow lines with quantity 0. Chift will bypass those lines in the future. | | UNEXPECTED\_PENNYLANE\_ERROR | The setup of the invoice tab is incomplete on Pennylane. | Setup an invoicing sequence for customer invoices in Pennylane => To be done in Pennylane so that Pennylane knows how to generate invoice number | | ERROR\_CONNECTOR\_CONFIGURATION | The invoice settings of Pennylane must be correctly set up (invoicing sequences must be defined) before creating invoices via API. | Set up invoicing sequences in Pennylane settings. | | ERROR\_DRAFT\_SUPPLIER\_INVOICE | You cannot create a draft supplier invoice in Pennylane. | Set the invoice status to validated/posted instead of draft. | | ERROR\_INVALID\_BODY | Email addresses must be valid, or ledger account numbers must be at least 3 digits (without counting trailing zeros). | Provide a valid email address and use account numbers with at least 3 digits. | | ERROR\_INVALID\_FIELD\_FORMAT\_BANK\_ACCOUNT | Pennylane validates the bank account/IBAN format. | Provide a valid bank account number or IBAN. | | ERROR\_PDF\_MUST\_BE\_UNIQUE | Pennylane performs a uniqueness check on attached PDFs. | Ensure each PDF attachment is unique and not already attached to another invoice. | | ERROR\_INVOICE\_DATE\_IN\_FUTURE | You cannot create an invoice with a future date without attaching a PDF. | Attach a PDF when creating an invoice with a future date. | | ERROR\_INVOICE\_DATE\_IN\_PAST | You cannot create an invoice with a date before the date of the last validated invoice in Pennylane. | Use a date equal to or after the last validated invoice date. | # Pennylane Firm Source: https://docs.chift.eu/connectors/accounting/pennylane-firm # **Introduction** Pennylane centralizes all financial and accounting flows in real time and streamlines collaboration between business leaders and their accountants. \ Beyond the Company API designed for use by individual businesses, Pennylane also offers a dedicated **Firm API** tailored specifically for accounting practices and the tools they build. This Firm API provides authenticated access to a firm’s entire portfolio of client companies, enabling retrieval of consolidated client lists, detailed accounting reports (trial balance, FEC, analytical ledger), and other firm‑level data. It’s the foundation for integrations that need to operate across multiple client accounts and embed Pennylane data directly into a practice’s workflows or software ecosystem. ## Configure Pennylane Sandbox and production credentials are identical on Pennylane's side. Before going live, your integration must be certified by both Chift and Pennylane (see Step 3). Follow the steps below to get sandbox access, retrieve your OAuth2 credentials, and go live. Chift can assist you with each step. ### Step 1: Open the partnership & get sandbox access Fill in the [partnership form](https://www.notion.so/23b2276c03bf8059a59dcb775b546a96?pvs=21): * **Question 4** — Which entity will be responsible for developing the connector? Select **Chift**. * **Question 5** — Do you have access to the Pennylane sandbox? Select **No, open access for me**. Question 5b will then appear; enter the email address to associate with the sandbox. By default, Pennylane provides sandboxes **without the accounting module**. Once you're connected to your sandbox, notify Chift so we can ask Pennylane to activate it for you. ### Step 2: Get your OAuth2 credentials Fill in the [OAuth2 request form](https://form.typeform.com/to/Vn0iWTJv) to receive your **Client ID** and **Client Secret**. ### Step 3: Go live — certify your integration Fill in the [pre-certification form](https://www.notion.so/23e2276c03bf80bc9704c06e99cd059c?pvs=21), then ask Chift to schedule a meeting with Pennylane. During this meeting you'll: * Present an internal demo of your integration to Pennylane. * Have Chift on the call to answer any technical questions. ### Step 4: Publish on Pennylane's marketplace & in-app To appear on Pennylane's public marketplace and in-app, and to benefit from their communication around your partnership, fill in the [app-listing form](https://www.notion.so/2402276c03bf80eea025ffdd8d1b214a?pvs=21). ## Test Pennylane You will receive sandbox access directly after filling in the partnership form from *Step 1*. Don’t forget to reach out to your Chift point of contact to activate the Accounting module. ## Connect Pennylane To activate a connection with Pennylane, users will have to go through the following steps. \ French article: [**Help Center - Pennylane FR**](https://help.chift.app/articles/9277286785-pennylane?lang=fr) \ English article: [**Help Center - Pennylane EN**](https://help.chift.app/articles/9277286785-pennylane?lang=en) ## Coverage # QuickBooks (Accounting) Source: https://docs.chift.eu/connectors/accounting/quickbooksaccounting ## Introduction QuickBooks Accounting is a comprehensive cloud-based accounting software designed for small and medium-sized businesses. Developed by Intuit, it provides real-time financial insights, automated bookkeeping, invoicing, expense tracking, and tax preparation tools. QuickBooks helps businesses streamline their financial operations with features like bank reconciliation, inventory management, and detailed reporting capabilities. ## Configure QuickBooks Accounting **Prerequisite(s)** * Create an Intuit Developer account and register your application * Obtain OAuth 2.0 credentials (Client ID and Client Secret) from the Intuit Developer Dashboard * Activate the QuickBooks Accounting integration on the Chift platform **Activation Process** * Sign up for an [Intuit Developer account](https://developer.intuit.com/) and complete the registration * Create a new app in the Intuit Developer Dashboard: * Select "QuickBooks Online Accounting API" as your integration * Configure the redirect URI to: `https://chift.app/oauth2/redirect` * Set required scopes: `com.intuit.quickbooks.accounting` * Copy your **Client ID** and **Client Secret** from the app dashboard * Navigate to the **connector page** in the **Chift back office** and **toggle the activation switch for QuickBooks Accounting** * When activating the connector, you will be prompted to **enter the Client ID and Client Secret** you previously copied * The OAuth2 flow will capture the **Realm ID** (Company ID) automatically during connection * Submit your app for **Production approval** through the Intuit Developer portal when ready for live connections. Details can be found [here](https://developer.intuit.com/app/developer/qbo/docs/go-live/list-on-the-app-store/what-to-expect-during-the-review) ## Test QuickBooks Accounting QuickBooks provides a robust sandbox environment for testing integrations: * Access the **Intuit Developer Playground** with sample company data * Sandbox and production environments are automatically selected based on your app configuration * Test with multiple company scenarios and data types * Validate OAuth flows and API endpoints before going live * Note: Customer invoice creation is not supported in either sandbox or production environments ## Connect QuickBooks Accounting To activate a connection with QuickBooks Accounting, users will have to go through the following steps: * French article: [Help Center - QuickBooks Accounting FR](https://help.chift.app/articles/1919343388-quickbooks-accounting?lang=fr) * English article: [Help Center - QuickBooks Accounting EN](https://help.chift.app/articles/1919343388-quickbooks-accounting?lang=en) ## Technical limitations **Invoice Type Restrictions** * Customer invoice creation is not supported through this integration * Only supplier invoice types (bills and vendor credits) can be created * Customer invoices and credit memos can be read but not created **API Constraints** * Multi-plan analytic accounts are not supported (QuickBooks uses a single class system) * Realm ID is required for all API operations ## Rate limiting QuickBooks Online API has the following rate limits: * 500 requests per minute for most endpoints * 100 requests per minute for Reports API * 10 requests per minute for batch operations These limits are automatically managed by Chift to optimize performance and prevent interruptions. However, once the API rate limit is reached, Chift cannot bypass these limitations and requests will need to wait until the limit resets. For high-volume operations, it's recommended to plan accordingly and distribute requests over time. ## Coverage ## Troubleshooting ### Specific errors for QuickBooks: | Error Code | Error description | Resolution | | ---------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------- | | ERROR\_CUSTOMER\_INVOICE\_TYPE\_NOT\_SUPPORTED | Customer invoices and refunds cannot be created with the QuickBooks accounting connector. | Use supplier invoice types instead. | | ERROR\_ACCOUNT\_TYPE\_NOT\_ALLOWED | Journal entries can only be linked to general ledger accounts in QuickBooks. | Use only general ledger accounts for journal entries. | # Reviso Source: https://docs.chift.eu/connectors/accounting/reviso ## Introduction Reviso is a cloud accounting software for small businesses and bookkeepers. Do online invoices, bank reconciliation and bookkeeping. # Sage 100 Comptabilité Source: https://docs.chift.eu/connectors/accounting/sage100 ## Introduction Sage 100 is designed for mid-sized companies. It offers a wider range of features and capabilities than Sage 50, including more robust financial management, inventory management, and customer relationship management (CRM) capabilities. Deliver the Sage 100 integration your customers want in no time. ## Configure Sage 100 **Prerequisite(s)** No prerequisite to enable the connector. However, it is important to know that Sage100 is an accounting tool for SMEs. Sage 100 runs from a local server OR is installed on the Sage cloud (Sage Partner Cloud). **Activation Process** Activate the connector in one click on the connector section in your Chift account. ### Settings #### Invoice number handling Image A configuration setting is available to control how the `number` and `reference` fields are used when creating entries in Sage 100. When enabled, the value sent in `reference` can be used as the invoice number in Sage 100 instead of the value sent in the `number` field. * **Options:** * **No** — the `number` field is used as the invoice number. * **Yes and omit the value sent in the `number` field** — the `reference` value is used as the invoice number and the `number` value is ignored. * **Yes and keep the value sent in the `number` field in the `reference` field of Sage 100** — the `reference` value is used as the invoice number, and the `number` value is stored in the `reference` field of Sage 100. ## Test Sage 100 To test the software integration, you need to go through an integrator to get a sandbox account or you must identify beta users in your client base willing to allow you to use their account for testing. ## Connect Sage 100 To activate a connection with Sage 100, users will have to go through the following steps. * French article: [Help Center - Sage100 FR](https://help.chift.app/articles/3664395354-sage-100-fr?lang=en) N.B.: Important to know that in France Sage only distributes through Integration partner - thus the client wishing to connect to Sage 100 will need the help of its Sage100 integration partner to do so. ## Coverage ## Troubleshooting ### Specific errors for Sage 100: | Error Code | Error description | Resolution | | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- | | ERROR\_JOURNAL\_ALREADY\_OPEN | The accountant has the journal opened on his computer | The client cannot be on the same journal when the sync try to push data to Sage | | ERROR\_INVALID\_FIELD\_FORMAT\_ACCOUNT\_NUMBER | The account number has a maximal length of 13 characters and must be a number in Sage 100. | Shorten the account number to 13 characters or fewer and use only numeric characters. | | ERROR\_INVALID\_FIELD\_FORMAT\_INVOICE\_NUMBER | The invoice number has a maximal length of 17 characters in Sage 100. | Shorten the invoice number to 17 characters or fewer. | | ERROR\_INVALID\_FIELD\_FORMAT\_NAME | The name has a maximal length of 17 characters in Sage 100. | Shorten the name to 17 characters or fewer. | | ERROR\_INVALID\_FIELD\_FORMAT\_NUMBER | The number has a maximal length of 17 characters in Sage 100. | Shorten the number to 17 characters or fewer. | | ERROR\_INVALID\_FIELD\_FORMAT\_OPERATION\_NUMBER | The operation number has a maximal length of 17 characters in Sage 100. | Shorten the operation number to 17 characters or fewer. | | ERROR\_ZERO\_LINE | You cannot create entries or operations with a line equal to zero in Sage 100. | Ensure all entry/operation lines have a non-zero amount. | | ERROR\_CONFIGURATION\_CONNECTION | No matching connection ID found in the settings.json. | Verify the connection ID is correctly configured in the settings. | | ERROR\_INVALID\_FIELD\_FORMAT\_ID | The format of the ID of the invoice doesn't seem to be correct. | Provide a valid invoice ID in the correct format. | | ERROR\_JOURNAL\_NOT\_ACTIVE | The journal is not active in Sage 100. | Activate the journal in Sage 100. | | ERROR\_PARTNER\_ACCOUNT\_NOT\_SET\_UP | The client/supplier has no collective account configured. | Set up a collective account for the client/supplier in Sage 100. | | ERROR\_ACCOUNT\_NUMBER\_NOT\_CONFIGURED | The account number is not configured to be used in entries. Only detailed ledger accounts can be used. | Use a detailed ledger account instead of a summary account. | | ERROR\_TAX\_AMOUNT\_NOT\_CORRESPONDING | The tax amount must be greater than zero, or must be zero when using a non-national tax code. | Ensure the tax amount matches the requirements for the tax code type used. | | ERROR\_PARTNER\_ACCOUNT\_MISSING | Please provide a client/supplier account in the partner\_id field. | Include a client/supplier account in the partner\_id field. | | ERROR\_PARTNER\_NOT\_GOOD\_SCOPE | The partner must be a supplier for purchase entries, or a client/customer for sales entries. | Use the correct partner type for the entry type (client for sales, supplier for purchases). | | ERROR\_CHAREGE\_PRODUCT\_ACCOUNT\_MISSING | Please provide at least one charge/product account. | Include at least one charge or product account in the entry. | | ERROR\_PARTNER\_ALREADY\_OPEN | The client/supplier couldn't be updated because it is already open via the Sage 100 interface. | Close the client/supplier record in the Sage 100 interface before updating. | # Sage 200 ES Source: https://docs.chift.eu/connectors/accounting/sage200es ## Introduction Sage 200 ES is an on-premise ERP and accounting solution designed for small and medium-sized businesses in Spain. It covers financial management, accounting, and business administration. Sage 200 ES uses the Chift Cockpit to make the installation process smoother. ## Configure Sage 200 ES **Prerequisite(s)** There is no prerequisite to enable Sage 200 ES on your Chift App. **Activation Process** Activating the connector takes just one click — simply switch it on from the Connectors page of your platform. ## Limitations * **`GET` folders**: no address data. There is no separate `company_number` — the VAT (CIF) is used as the company identifier. * A journal object exists and can be retrieved and created via the integration. However, our consultant indicates this object is no longer used by end users — *"Everything is just booked on journal 0 - Sin informar"*. * No possibility to use an `updated_after` filter for clients, suppliers, journal entries, etc. * **`POST` invoices**: `invoice_number` is limited to a maximum of 9 characters. ## Connect Sage 200 ES To activate a connection with Sage 200 ES, users will have to go through the following steps. * English article: [Help Center - Sage 200 ES (EN)](https://help.chift.app/articles/5703231786-sage-200-es?lang=en) * Spanish article: [Help Center - Sage 200 ES (ES)](https://help.chift.app/articles/5703231786-sage-200-es?lang=es) ## Test Sage 200 ES Sage 200 ES is an on-premise tool. You can contact a Sage 200 implementation partner to set up a test environment. We can also provide credentials for a shared test environment — contact Chift to obtain access and connect to our test environment. The Sage 200 ES local agent is installed via the **Chift Cockpit**. See the [Local agents — Sage 200 ES section](/back-office/advanced/local-agent) for detailed installation instructions. ## Coverage # Sage 50 FR Source: https://docs.chift.eu/connectors/accounting/sage50FR ## Introduction Sage 50 France, formerly known as "Ciel Comptabilité", is a desktop accounting software that is designed for small businesses. It provides basic accounting and financial management features, including invoicing, payroll, and bank reconciliation. Deliver the Sage 50 integration your customers want in no time. ## Configure Sage 50 France **Prerequisite(s)** No prerequisite to enable the connector. **Activation Process** Activate the connector in one click on the connector section in your Chift account. ## Test Sage 50 France To test the software integration, you can create your sandbox by getting a free test account on Sage 50 [here](https://www.ciel.com/demande-version-test-gratuit.aspx?og=sage\&pc=S5KCL0002). ## Connect Sage 50 France To activate a connection with Sage 50 France, users will have to go through the following steps. * French article: [Help Center - Sage 50 France FR](https://help.chift.app/articles/7058012611-sage-50-fr?lang=fr) * English article: [Help Center - Sage 50 France EN](https://help.chift.app/articles/7058012611-sage-50-fr?lang=en) ## Coverage # Sage Intacct Source: https://docs.chift.eu/connectors/accounting/sageIntacct ## Introduction Sage Intacct is a cloud-based accounting and financial management software designed for growing organizations and mid-sized companies. It provides automation and real-time insights across financials, planning, and reporting, helping businesses streamline accounting processes, automate manual tasks, and make data-driven decisions with comprehensive financial visibility. ## Configure Sage Intacct **Prerequisite(s)** * No prerequisites are needed to activate the Sage Intacct connector. To be listed on the Sage Intacct marketplace, you need to discuss a special partnership with Sage. Contact your Chift account manager for more information. * Each end customer needs to buy a Sage Intacct Web Services developer license. **Activation Process** Activate the connector in one click from the Connectors section of your Chift account. ## Test Sage Intacct Chift can provide you with a test Sender ID for testing purposes. Contact Chift to get access to the testing credentials and connect to your Sage Intacct test environment. ## Connect Sage Intacct To activate a connection with Sage Intacct, follow these steps: * French article: [Help Center - Sage Intacct - FR](https://help.chift.app/articles/6529239039-sage-intacct?lang=fr) * English article: [Help Center - Sage Intacct - EN](https://help.chift.app/articles/6529239039-sage-intacct?lang=en) ## Coverage ## Troubleshooting ### Specific errors for Sage Intacct: | Error Code | Error description | Resolution | | -------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------- | | ERROR\_CURRENCY\_NOT\_ALLOWED | Foreign currency transactions are disabled in Sage Intacct. | Enable foreign currency transactions in the Sage Intacct company settings. | | ERROR\_INVALID\_ANALYTIC\_DISTRIBUTION | Certain dimensions can be mandatory depending on Sage Intacct setup. | Include all required dimensions as configured in Sage Intacct. | # Sage Generation Expert Source: https://docs.chift.eu/connectors/accounting/sagege ## Introduction Sage Generation Experts (formerly Sage Coala) is an integrated & modular solution dedicated to the accounting and social production activities for certified accountants. ## Configure Sage Generation Expert **Prerequisite(s)** * Encode a sage partner account Application ID, Client ID and Secret ID. * Activate the Sage Generation Expert integration on the Chift platform. **Activation Process** Ask Chift to encode their Partner, Client and Secret ID on your Application in sandbox and production. ## Test Sage Generation Expert To test the software integration, requesting Sage for a sandbox, can be very complex. The other option is to go through an integrator to get a Sage sandbox account. Last option, most used, is to identify a beta tester in your client or prospects and test the connection with them. ## Connect Sage Generation Expert To activate a connection with Sage Generation Expert, users will have to go through the following steps. * French article: [Help Center - Sage Generation Expert FR](https://help.chift.app/articles/7376953121-sage-g-n-ration-experts?lang=fr) * English article: [Help Center - Sage Generation Expert EN](https://help.chift.app/articles/7376953121-sage-g-n-ration-experts?lang=en) ## Coverage ## Troubleshooting ### Specific errors for Sage Génération Expert: | Error Code | Error description | Resolution | | ---------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | | ERROR\_INVALID\_REQUEST | Invalid line amount | Chift will bypass those invoices in the future | | ERROR\_ACCOUNT\_NUMBER\_NOT\_NOT\_GOOD\_SCOPE | The account 'XXXXXX' cannot be used to create entries. | Please change account number in the invoice line with a product/charge ledger account | | ERROR\_ACCOUNT\_NUMBER\_NOT\_NOT\_GOOD\_SCOPE | The account number 'XX' cannot be used in an invoice line. | Please change account number in the invoice line with a product/charge ledger account | | ERROR\_ACCOUNT\_NUMBER\_NOT\_GOOD\_SCOPE | Collective general accounts cannot be used to book journal entries in Sage Génération Experts. | Use a thirdparty account instead of a collective general account. | | ERROR\_COLLECTIVE\_ACCOUNT\_NOT\_CONFIGURED | Collective ledger accounts must be configured in Sage GE to support client/supplier creation. | Configure collective ledger accounts in Sage Génération Experts. | | ERROR\_CURRENCY\_NOT\_ALLOWED | Entries can only be created in EUR in Sage Génération Experts. An exchange rate must be provided for other currencies. | Use EUR as the currency or provide a valid exchange rate. | | ERROR\_INVALID\_BODY | Sage GE requires at least 1 entry item with a debit or credit amount different from zero. | Ensure at least one entry item has a non-zero debit or credit amount. | | ERROR\_ZERO\_INVOICE | Sage GE doesn't accept invoices where all lines have an amount of 0. | Ensure at least one invoice line has a non-zero amount. | | ERROR\_INVALID\_FIELD\_FORMAT\_INVOICE\_NUMBER | Invoice numbers are limited in length as configured in Sage GE settings. | Shorten the invoice number to fit within the limit configured in Sage Génération Experts. | | ERROR\_INVALID\_FIELD\_FORMAT\_NUMBER | Entry numbers are limited in length as configured in Sage GE settings. | Shorten the entry number to fit within the limit configured in Sage Génération Experts. | # sevdesk Source: https://docs.chift.eu/connectors/accounting/sevdesk ## Introduction sevdesk is a German cloud-based accounting software for small businesses and freelancers. sevdesk is part of the CEGID group End users must be subscribed to the **“Buchhaltung Pro”** plan to use the sevdesk integration\ (see [pricing](https://sevdesk.de/preise/)) ## Configure sevdesk ### Prerequisites There is no prerequisite to enable sevdesk on your Chift APP. ### Activation process Activating the connector takes just one click — simply switch it on from the Connectors Page of your platform. ## Test sevdesk A free test account can be created [here](https://sevdesk.de/register/) (Valid for 14 days) Select **“Testphase starten”**.\ The test account is created without dummy data. ## Connect sevdesk * English article: [Help Center - sevdesk EN](https://help.chift.app/articles/6991107797-sevdesk?lang=en) ## Technical limitations * No real journal concept. Only **banking** and **cash** journals are available. * Customer and supplier references (`customer_code`) are generated by sevdesk and cannot be set or overridden. * Invoices created via the sevdesk UI do not expose their ledger account numbers. * Payments can be created via API and manually matched to invoices in sevdesk, but: * Payments are not returned when fetching invoices * There is no invoice–payment relationship available through the API * When updating customers or suppliers: * Addresses cannot be updated if more than one address of the same type exists * The same limitation applies to `communicationWay` ## Coverage ## Troubleshooting ### Specific errors for sevDesk: | Error Code | Error description | Resolution | | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- | | ERROR\_CONNECTOR\_CONFIGURATION | The provided country is not supported in sevDesk. Only Germany is supported. | Only connect German companies to sevDesk. | | ERROR\_UNSUPPORTED\_BODY | The invoice needs at least one line. It is also not possible to update an address type if multiple addresses of the same type exist. | Ensure the invoice has at least one line and that address types are unique for the contact. | | ERROR\_WRONG\_TAX\_CODE\_COMBINATION | Only one tax code per invoice is allowed in sevDesk. | Use only one tax code per invoice. | # SnelStart Source: https://docs.chift.eu/connectors/accounting/snelstart ## Introduction SnelStart is an accounting suite that gives companies an overview of their most important financial metrics. By automizing data exchange, SnelStart gives an overview of the company health. ## Configure SnelStart ### Prerequisites * **Obtain your Subscription Key** by applying for partner certification (5-step process). **Important notes** * **Snelstart’s certification costs €250 (one-off cost)**. This fee is billed directly by Snelstart and cannot be waived * Partner approval is selective. Acceptance depends largely on SnelStart’s partnership strategy, and applications may be declined if they do not align. ### Activation process **Sandbox / Testing access** * Create an account on the SnelStart Developer Portal ([https://b2bapi-developer.snelstart.nl/](https://b2bapi-developer.snelstart.nl/)) and complete registration.\ Your app is created under your developer access in the B2B API Portal and remains valid for **3 months**. * Generate a **Production Test App** to receive a temporary key while waiting for your Subscription Key: [https://b2bapi-developer.snelstart.nl/](https://b2bapi-developer.snelstart.nl/) **Production Certification ** * Apply for your Subscription Key through the certification form:\ [www.snelstart.nl/api](http://www.snelstart.nl/api) This starts the production certification process. Complete the form carefully — the information is reused for your partner page. A detailed walkthrough is available here:\ [https://b2bapi-developer.snelstart.nl/](https://b2bapi-developer.snelstart.nl/) (refer to *productiekoppeling - you must be logged in to your developer account to access the page*). * Certification typically takes **about 7 days**.\ During this period, SnelStart performs a technical validation. You must execute **at least 100 API calls** using the integration, while keeping error rates low. Meeting these criteria allows certification to complete within the expected timeframe. * Once your Subscription Key is granted * Log in to the **SnelStart B2B API Portal** using your credentials. * Navigate to your **Profile** page. * In the **Subscription** section, copy one of the two available subscription keys (**primary key recommended**). * On the **Chift platform**, **enter the Subscription Key** on the connector page. ## Test Snelstart SnelStart creates a **unique Production Test App** for your integration. This access to the production test environment will be sent by Snelstart right after registration. ## Connect Snelstart * English article: [**Help Center - Snelstart EN**](https://help.chift.app/articles/8692406098-snelstart?lang=en) ## Rate limits The B2B API enforces limits on the number of requests per administration depending on the product type. These limits are designed to ensure stable performance for all users. | Product | Call rate per administration (per minute) | Calls per administration (per hour) | Max concurrent requests per administration | | :---------------------------- | :---------------------------------------- | :---------------------------------- | :----------------------------------------- | | Development & Test | 100 | 1,000 | 5 | | Custom Integration (Maatwerk) | 500 | 5,000 | 50 | | Production | 500 | 5,000 | 50 | ## Coverage ## Troubleshooting ### Specific errors for SnelStart: | Error Code | Error description | Resolution | | -------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | | ERROR\_INVALID\_ANALYTIC\_DISTRIBUTION | SnelStart does not support splitting analytic accounts per invoice. The analytic plan must be 'kostenplaatsen'. | Use only one analytic account per invoice and ensure the analytic plan is 'kostenplaatsen'. | | ERROR\_INVALID\_BODY | The analytic account name is required when creating, or the name parameter exceeds the maximum allowed length. | Provide an analytic account name and ensure the name doesn't exceed the maximum length. | | UNEXPECTED\_SNELSTART\_ERROR | The provided document type is not supported. | Use a supported document type for the requested operation. | # Tiime Source: https://docs.chift.eu/connectors/accounting/tiime ## Introduction Tiime offers an all-in-one platform that simplifies accounting and administrative tasks for entrepreneurs and accountants. It includes features like invoicing, expense tracking, professional accounts, and financial management tools, streamlining the business processes of small enterprises. ## Configure Tiime **Prerequisite(s)** * Have an Oauth 2 application configured for the integration. Either your own partner application or Chift's generic. * Activate the Tiime integration on the Chift platform. **Activation Process** Ask Chift to encode the partner key or request for a dedicated Oauth2 application. Unfortunately, there’s no established process for clients to obtain their own certified app. We therefore recommend going through us. ## Test Tiime To test the software integration, requesting for a sandbox, can be very complex. The other option is to go through an integrator to get a Tiime sandbox account. Last option, most used, is to identify a beta tester in your client or prospects and test the connection with them. ## Connect Tiime To activate a connection with Tiime, users will have to go through the following steps. * French article: [Help Center - Tiime FR](https://help.chift.app/articles/9349828140-tiime?lang=fr) * English article: [Help Center - Tiime EN](https://help.chift.app/articles/9349828140-tiime?lang=en) ## Technical limitations The route allowing the clients/suppliers creation is not supported due to some technical limitations on Tiime's APIs. The only way to create a client/supplier is by creating an invoice for this non existing client/supplier. To be able to create a client or supplier related to your invoice, you must provide a field named "partner\_infos" instead of the partner id. This field must be a json object following the structure of the following example: ```json theme={null} "partner_info": { "account_number": "XXX", "account_name": "XXX" } ``` By providing the following information, the endpoint from Tiime responsible for the invoice creation will create the related client/supplier before actually creating the invoice. ## Coverage ## Troubleshooting ### Specific errors for Tiime: | Error Code | Error description | Resolution | | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | | ERROR\_CURRENCY\_NOT\_ALLOWED | Invoices and entries can only be created in EUR in Tiime. A currency exchange rate must be provided when handling foreign currencies. | Use EUR as the currency or provide a valid exchange rate for foreign currencies. | # Tripletex Source: https://docs.chift.eu/connectors/accounting/tripletex ## Introduction Tripletex is a comprehensive cloud-based accounting and financial management system from Norway. It provides businesses with a complete suite of financial tools including accounting, payroll, invoicing, time tracking, and project management capabilities. It helps businesses streamline their financial operations and maintain real-time oversight of their company's financial health through automated data exchange and reporting features. ## Configure Tripletex **Prerequisite(s)** * **Sign up** on the [Tripletex portal](https://www.tripletex.no) and complete the registration process. * **Apply for API access (production)** by submitting Tripletex’s API [application form](https://docs.google.com/forms/d/e/1FAIpQLSdvZXwahq8sr4YKz3h9e4THhE4Gk6vO1F0Hf4rUPIsDD2E0KA/viewform). Once approved, you’ll receive the credentials required to connect. **Activation Process** * **Retrieve the Consumer Token**\ After your API access is approved, Tripletex will provide you with a **Consumer Token**. Copy and store it securely — you’ll need it during connector activation. * **Activate the Tripletex Connector**\ In the **Chift platform**, navigate to the connector list and **enable the Tripletex connector** by toggling the activation switch. * **Enter the Consumer Token**\ When prompted during activation, paste the **Consumer Token** you retrieved earlier. * **Set the Application Name**\ In the connector settings, fill in the [**tripletex.app**](http://tripletex.app)**\_name** field with the **Application Key / Code** you received from Tripletex once your application was approved. > 💡 This step ensures the **Application Key** is automatically displayed on the activation page for the end customer. They will need it to generate their **Employee Token** — required to complete the connection.\ > This approach keeps the process fully self-service for the customer and avoids the need for you to share the key manually. ## Testing Tripletex A dedicated **test environment** is available as soon as your **developer account** is created in Tripletex. Use this environment to validate your integration before going live. ## Connecting Tripletex * English article: [Help Center - Tripletex](https://help.chift.app/articles/4381472069-tripletex?lang=en) ## Coverage ## Troubleshooting ### Specific errors for Tripletex: | Error Code | Error description | Resolution | | --------------------------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | | ERROR\_INVALID\_BODY | Invoice numbers can only contain digits in Tripletex. | Use only numeric characters for the invoice number. | | ERROR\_INVOICE\_PARTNER\_MISMATCH | All invoices linked to a payment must belong to the same customer in Tripletex. | Ensure all invoices in the payment belong to the same partner. | | ERROR\_INVOICE\_TYPE\_MISMATCH | A payment cannot be linked to both customer invoices and supplier invoices at the same time. | Use separate payments for customer invoices and supplier invoices. | | ERROR\_TAX\_CODE\_NOT\_CONFIGURED | The provided tax code cannot be used with the specified account number in Tripletex. | Use a tax code that is compatible with the account number. | | ERROR\_CURRENCY\_NOT\_ALLOWED | You cannot create bank accounts in foreign currencies in Tripletex. Only EUR is allowed through the API. | Use EUR for bank account creation. | # Twinfield Source: https://docs.chift.eu/connectors/accounting/twinfield ## Introduction Twinfield online accounting software easily manages all accounting functions, from invoicing to management accounting – for the smallest startup to the largest international group. ## Prerequisite(s) To connect Twinfield with Chift, you need a certified Twinfield application. Twinfield’s certification costs €53 per month. This fee is billed directly by Twinfield and cannot be waived. As a Chift customer, you benefit from a **custom and exclusive process** that gives you an **immediate and systematic certification** for your Twinfield connection. * **No need for a Twinfield developer account.** * **Your dedicated app is created by Chift in your name**, so your clients will see *your company name* (not Chift’s) during the OAuth2 authorization process. * **No manual certification process required** if you’re a Chift customer. All you need to do is complete the form shared by Chift. We handle app creation, technical validation, and provide access to the Twinfield test environment. ### Process * **1. Contact your Chift Customer Success Manager**\ Reach out to your CS Manager to start the certification process.\ Chift will create your dedicated Twinfield app. * **2. Complete Twinfield's client details form**\ Fill in [Twinfield’s form](https://e.wolterskluwer.com/Aanvragen-API-Certificaat) with your company information, including billing details. You will need the `client_id` provided by Chift once your app has been created in step 1. Twinfield Clientid In Form Pn * **3. Access to the test environment**\ Once the form is submitted, you will be provided with your test environment (and support portal). However, all support and guidance go through Chift—there’s no need to interact directly with Twinfield’s support portal. * **4. Certification approval**\ Once Twinfield processed your information, **your certification is granted immediately**. ## Test Twinfield You will receive a testing environment right after the completion of step 2 of the process ## Connect Twinfield To activate a connection with Twinfield, users will have to go through the following steps: * English article: [Help Center - Twinfield- EN](https://help.chift.app/articles/5900731018-twinfield?lang=fr) ## Coverage ## Troubleshooting ### Specific errors for Twinfield: | Error Code | Error description | Resolution | | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | | ERROR\_INVALID\_BODY | Twinfield validates email formats, bank account/IBAN formats, and requires journals to be set up correctly for currency dates. | Provide a valid email, ensure the journal supports currency dates, and provide a valid bank account number or IBAN (minimum 2 characters). | | ERROR\_INVALID\_FIELD\_FORMAT\_NUMBER | The entry number must contain only digits in Twinfield. | Use only numeric characters for the entry number. | | ERROR\_INVALID\_FIELD\_FORMAT\_STATEMENT\_NUMBER | The external bank statement ID/number can only contain a maximum of 10 digits in Twinfield. | Shorten the statement number to 10 digits or fewer. | | ERROR\_INVALID\_PERIOD | 'date\_from' and 'date\_to' are mandatory for Twinfield journal entries retrieval. The date range must be 3 months or less. | Provide both date parameters and ensure the range doesn't exceed 3 months. | | ERROR\_NEGATIVE\_JOURNAL\_BALANCE | A negative balance on the balance sheets is blocking the use of the ledger account in Twinfield. | Correct the negative balance in Twinfield before creating new entries. | # Visma eAccounting Source: https://docs.chift.eu/connectors/accounting/visma_eaccounting ## Introduction Visma eAccounting is an accounting software developed by Visma, primarily designed for accountants as well as small and medium-sized businesses in the Netherlands and other European markets. It offers a user-friendly interface and a range of features, including invoicing, expense tracking, bank reconciliation, payroll integration, and VAT reporting. Because it is fully cloud-based, users can access their financial data from anywhere and collaborate easily with their accountants. ## Configure eAccounting **Prerequisite(s)** There is no prerequisite to enable eAccounting in your Chift App. * A registered **partner account** on Visma’s Developer Portal: [https://selfservice.developer.vismaonline.com](https://selfservice.developer.vismaonline.com) Access to **Sandbox credentials**, sent via email after registration * Request **Production credentials** to the visma partner in your country. **Activation Process** ### Use Chift's credentials The preferred method is to use Chift's credentials to activate the connector. Please ask your CSM to activate the connector. ### Request your own credentials In case you really want your own credentials, this is the process to request for access. #### A. Register for sandbox access 1. **Create a Partner Account** * Go to [https://selfservice.developer.vismaonline.com](https://selfservice.developer.vismaonline.com) * Complete the registration to create a developer/partner account. 2. **Receive Sandbox Credentials** * Visma will send you an email with: * `client_id` * `client_secret` * Other relevant sandbox access tokens 3. **Activate connection in Chift's platform** Enable Visma Eaccounting connector in the connector list and enter **client\_id** and **client\_secret** #### B. Request production credentials 1. **Send an Email Request** * Depending on your country, send an email request to the appropriate address: | Country | Email | | :---------------------------------------------- | :-------------------------------------------------------------------- | | **Sweden** | [api@spiris.se](mailto:api@spiris.se) | | **Norway** | [api\_eaccounting@visma.com](mailto:api_eaccounting@visma.com) | | **Netherlands** | [partner.eaccounting@visma.com](mailto:partner.eaccounting@visma.com) | | Include the following information in your mail: | | * **Application name**: `Chift` * **Company name**: (Include a 2-line description, e.g. *"Chift is a unified API platform connecting various accounting and banking systems to centralize business data."*) * **Redirect URI(s)**: `https://chift.app/oauth2/redirect` * **Requested scopes**: | Scope | Purpose | | :--------------- | :--------------------------------------------------- | | `ea:api` | Base access to the eAccounting API | | `ea:sales` | Access to customer sales and invoices | | `ea:purchase` | Access to purchase and supplier invoices | | `ea:accounting` | Access to accounting data like journals and accounts | | `offline_access` | Enables long-lived tokens for background syncing | * To have the partnership request and access to the production environment approved, a **Terms and Conditions document** provided by Visma eAccounting/Advisor Production API will need to be **signed electronically**. * **Once approval is received, activate the eAccounting integration on the Chift platform** with production keys. ## Test eAccounting Please ask your country's point of contact (see table above) for a test account including dummy data ## Coverage ## Troubleshooting ### Specific errors for Visma eAccounting: | Error Code | Error description | Resolution | | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | | ERROR\_CONNECTOR\_CONFIGURATION | A default receivable and payable account must be set up in the accounting system. | Configure default receivable and payable accounts in Visma eAccounting. | | ERROR\_INVALID\_FIELD\_FORMAT\_INVOICE\_NUMBER | The invoice number can only contain numbers in Visma eAccounting. | Use only numeric characters for the invoice number. | | ERROR\_INVALID\_QUERY\_PARAMETER | The document\_id is not a valid UUID. | Provide a valid UUID for the document\_id parameter. | | ERROR\_INVOICE\_NOT\_CREATED | Customer invoices and refunds can only be created for customers with invoices in the domestic currency. | Use domestic currency for customer invoices and refunds. | | ERROR\_JOURNAL\_ENTRY\_CREATION\_FAILED | The journal entry couldn't be created in the accounting system. | Retry the request. If the error persists, contact Chift support. | | ERROR\_MISSING\_INVOICE\_NUMBER | An invoice number is required when creating an invoice in Visma eAccounting. | Provide an invoice number. | | ERROR\_WRONG\_ACCOUNT\_TYPE | The ledger account is not configured to be used with the tax code. | Configure the ledger account to be compatible with the tax code. | | ERROR\_CONFIGURATION\_BANK\_ACCOUNTS | A currency bank account must be configured for foreign currencies to be able to create suppliers linked to a foreign currency for Swedish companies in Visma eAccounting. | Configure a currency bank account for the foreign currency in Visma eAccounting. | # Winbooks Source: https://docs.chift.eu/connectors/accounting/winbooksclassic ## Introduction WinBooks is an accounting and financial management software for small and medium-sized businesses. It allows you to manage company finances, track invoices and payments, produce financial reports and monitor company performance. Deliver the Winbooks integration your customer wants in no time. ## Configure Winbooks **Prerequisite(s)** No prerequisite to enable the connector. **Activation Process** Activate the connector in one click on the connector section in your Chift account. ## Test Winbooks To test the software integration, you need to go through an integrator to get a sandbox account or you must identify beta users in your client base willing to allow you to use their account for testing. ## Connect Winbooks To activate a connection with Winbooks, users will have to go through the following steps. * French article: [Help Center - Winbooks FR](https://help.chift.app/articles/1919343388-quickbooks-accounting?lang=fr) * English article: [Help Center - Winbooks EN](https://help.chift.app/articles/1919343388-quickbooks-accounting?lang=en) ## Coverage ## Troubleshooting ### Specific errors for Winbooks Classic: | Error Code | Error description | Resolution | | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | | ERROR\_INVALID\_FIELD\_FORMAT\_ENTRY\_NUMBER | The entry number can only contain numbers and has a maximal length of 8 characters in Winbooks. | Use only numeric characters and keep the entry number to 8 characters or fewer. | | ERROR\_INVALID\_FIELD\_FORMAT\_INVOICE\_NUMBER | The invoice number can only contain numbers and has a maximal length of 8 characters in Winbooks. | Use only numeric characters and keep the invoice number to 8 characters or fewer. | | ERROR\_ZERO\_INVOICE | Winbooks doesn't accept invoices where all lines have an amount of 0. | Ensure at least one invoice line has a non-zero amount. | | ERROR\_COMPANY\_NOT\_FOUND | The given company doesn't exist on the Winbooks server. | Verify the company name and server configuration. | | ERROR\_INVALID\_FIELD\_FORMAT\_ANALYTIC\_PLAN | Analytic plans have a number between 1 and 8 in Winbooks. | Use an analytic plan number between 1 and 8. | | ERROR\_INVALID\_FIELD\_FORMAT\_ANALYTIC\_ACCOUNT | The code of the analytic account has a maximal length of 10 characters in Winbooks. | Shorten the analytic account code to 10 characters or fewer. | | ERROR\_INVALID\_FIELD\_FORMAT\_OPERATION\_NUMBER | The operation number has a maximal length of 8 characters in Winbooks. | Shorten the operation number to 8 characters or fewer. | | ERROR\_OPERATION\_IN\_FOREIGN\_CURRENCY | Winbooks only accepts miscellaneous operations in EUR. | Use EUR as the currency for miscellaneous operations. | | ERROR\_INVALID\_ACCOUNT\_TYPE | Receivable accounts must be used with clients and payable accounts with suppliers when creating miscellaneous operations. | Use the correct account type for the corresponding partner type. | # Xero Source: https://docs.chift.eu/connectors/accounting/xero ## Introduction Xero is a cloud-based accounting platform for small and medium-sized businesses. It provides real-time financial visibility, automated bank reconciliation, and comprehensive reporting tools to help businesses streamline accounting processes and make informed decisions. Our Xero connector allows your application to securely integrate with your users’ Xero accounts via OAuth2. **Important:** Since March 2, 2026, Xero introduced a new tiered API pricing system and additional limitations affecting authentication, API usage, and feature access. These changes have direct impact on integration design, data consumption, and costs. ## Configure Xero ### Prerequisites * Xero account with administrator permissions * OAuth2 application in Xero with **Client ID** and **Client Secret** * Appropriate OAuth scopes and pricing plan for the data you plan to access * Note: Uncertified apps are now limited to **5 connected organizations** ### Activation process **Setting up your Xero App** 1. If you don’t already have a Xero account, you can create one here: [Free trial](https://www.xero.com/signup/) 2. Sign in to the [Xero Developer Portal](https://developer.xero.com/). 3. Create a new app in the developer console: * **App name:** Choose a clear name that users will recognize during the OAuth flow. * **Integration type:** Select **Web app**. * **Company or application URL:** Enter your company’s website (starting with `https://`). * **Redirect URI:** Set to `https://chift.app/oauth2/redirect`. 4. Retrieve your app credentials and configure them in Chift: * In the Xero Developer Portal, open **My Apps** and select your application. * Reveal your **Client ID** from the configuration panel. * Click **Generate secret** to create a **Client Secret**. * Copy both values and store them securely. Enter the Client ID and Client Secret in the Xero connector configuration inside the Chift platform. Scopes are not set when creating the Xero Web app. They can be configured in the Chift Xero connector and requested during the OAuth flow.

For SSO only (not related to accounting operations), you have to request `openid`, `profile`, `email`. Some scopes are marked as *deprecated* and must not be requested for new apps created after 02/03/2026; doing so returns an invalid scope error. They remain listed only for backward compatibility and will be removed in the future. See also [Xero’s organisation scopes](https://developer.xero.com/documentation/guides/oauth2/scopes/#organisation-scopes). To use the `accounting.journals.read` scope, you need approval from Xero. | Scope | Status | Purpose | Optional | | :-------------------------------------- | :------------ | :---------------------------------------------------------------------------------------------------------- | :------: | | `offline_access` | | Enables long-lived refresh tokens for background syncing | | | `accounting.transactions.read` | Deprecated | Read invoices, credit notes, payments, manual journals | ✅ | | `accounting.invoices.read` | New | Read invoices and credit notes | ✅ | | `accounting.invoices` | New | Create and update invoices and credit notes | ✅ | | `accounting.payments.read` | New | Read payments | ✅ | | `accounting.payments` | New | Create and update payments | ✅ | | `accounting.banktransactions.read` | New | Read bank transactions | ✅ | | `accounting.manualjournals.read` | New | Read manual journals | ✅ | | `accounting.manualjournals` | New | Create and update manual journals | ✅ | | `accounting.reports.trialbalance.read` | New | Read trial balance reports | ✅ | | `accounting.journals.read` | Upon approval | Read manual journal entries | ✅ | | `accounting.settings.read` | | Read organisation settings and chart of accounts | | | `accounting.reports.read` | Deprecated | Read accounting reports | ✅ | | `accounting.contacts.read` | | Read customers and suppliers | | | `accounting.attachments.read` | | Read attachments on Invoices, CreditNotes, ManualJournals | | | `accounting.budgets.read` | | Read budgets | | | `accounting.reports.tenninetynine.read` | | Read 1099 reports | ✅ | | `files.read` | | Read from the Xero Files library | | | `accounting.transactions` | Deprecated | Create/update invoices, credit notes, manual journals; for PDF upload combine with `accounting.attachments` | ✅ | | `accounting.contacts` | | Create/update customers and suppliers | ✅ | | `accounting.settings` | | Create chart-of-accounts entries; manage organisation settings; create/update tracking options | ✅ | | `accounting.attachments` | | Upload attachments to Invoices, CreditNotes, ManualJournals | ✅ | | `files` | | Write to the Xero Files library | ✅ |
### ℹ️ Certification, Limits & Pricing (Updated 2026) #### 1. Development and initial limits (Starter Tier) Every new Xero integration begins in the **Development phase** under the **Starter Tier**. This is the default state for uncertified apps: * **Connection Cap:** Limited to a maximum of **5 active connected organizations**. * **API Limits:** 1,000 calls per day per organization; 60 calls per minute. * **Upgrade Path:** To connect more than 5 organizations, you must upgrade to a paid tier (Core, Plus, or Advanced) and begin the certification process. #### 2. Certification and growth (scaling beyond 5 connections) To grow your app and remove the 5-connection limit, you must move through the **Certification process**. This transition turns your "integration" into a formal **Xero App Partnership**: * **The "Beta" Threshold:** You need to reach at least **10 active connections** to qualify for App Store certification. * **Upgrade Requirement:** To reach those 10 connections, you must upgrade from the free Starter plan to a paid tier (starting with the **Core Plan**). * **Technical Review:** Xero will review your app to ensure it meets quality standards, including: * Proper error handling. * Secure data management. * A seamless onboarding flow (Sign In with Xero). * **App Store Listing:** Once certified, your app becomes eligible for listing on the **Xero App Store**, providing global visibility to Xero’s millions of subscribers. If your use case falls under **Bank Feeds, Lending & Credit, Expense Management, or Payment Services**, the standard certification does not apply to you. See the **Special Certification & Financial Services** section below and reach out to [partnerships@chift.eu](mailto:partnerships@chift.eu) so our Partnerships team can introduce you directly to the right Xero contact. #### 3. Pricing considerations — API pricing and tiers (effective March 2, 2026) Billing is based on your **Connected Companies** and **Monthly Data Consumption** (data downloaded via the API). The new model has five tiers: **Starter, Core, Plus, Advanced, Enterprise**. | **Plan** | **Max Connected Companies** | **Data Quota** | **Key Features & Notes** | | :------------- | :-------------------------- | :------------- | :---------------------------------------------- | | **Starter** | 5 | Unlimited\* | **Free**; For dev & small-scale testing. | | **Core** | 50 | 10 GB | \~€22/month; Threshold for Certification. | | **Plus** | 1,000 | 50 GB | \~€150/month; High-volume scaling. | | **Advanced** | 10,000 | 250 GB | \~€890/month; Unlocks premium APIs (see below). | | **Enterprise** | Custom | Custom | Custom contract; large-scale usage. | * **Data Overage:** Exceeding your quota costs approximately **€1.40 per additional GB**. * **Premium APIs (higher tiers only):** The **Journals API** (`GET /Journals`), the **Xero Practice Manager (XPM) API**, and **Bulk Connections** are restricted to the higher tiers (Advanced and above) and additionally require a **security assessment** (initial + annual) and a **use case validation** by Xero. **Journals vs Manual Journals — two different objects in Xero.** * **Journal** (`GET /Journals`) → [`GET Journal Entries`](/api-reference/endpoints/accounting/get-journal-entries) in Chift. **Read-only**, returns every general-ledger entry (including those auto-generated from invoices, payments, etc.). Gated as a **premium API**: requires the **Advanced** tier + security assessment. * **Manual Journal** (`POST /ManualJournals`) → [`POST Journal Entry`](/api-reference/endpoints/accounting/create-journal-entry) in Chift. **Write-only**, only covers entries you push manually. **Available on all tiers** — no Advanced required. The naming is counter-intuitive: **manual journals are not a subset of journals** — the two objects are unrelated. Advanced is only needed for the **read** endpoint; pushing manual journals works on every tier. Special Certification & Financial Services
If your application falls into any of the following categories, you operate under a **Specific Financial Services Contract** rather than the standard developer terms: * **Bank Feeds:** Automatically pushing transaction data into Xero. * **Lending & Credit:** Accessing Xero data specifically to assess creditworthiness or provide business loans. * **Expense Management:** Specialized flows for corporate cards and employee reimbursements. * **Payment Services:** Facilitating the movement of funds between bank accounts and Xero. **Next steps:** These contracts follow a different process and pricing (not publicly listed) than the standard developer terms. Contact our Partnerships team at [partnerships@chift.eu](mailto:partnerships@chift.eu) — we will introduce you directly to the right person at Xero to present the specific certification, contract, and next steps.
### 🔗 Official Reference Links For detailed guides on the certification journey and the latest pricing updates, consult: * **Step-by-Step Certification Guide:** [Building and Growing your App](https://developer.xero.com/documentation/xero-app-store/app-partner-guides/building-and-growing-your-app) * **Pricing & Policy FAQ:** [Xero API Updates 2026](https://developer.xero.com/faq/pricing-and-policy-updates) *** ## Test Xero Xero offers a **demo company** you can use to test your integrations. It comes with sample data, allowing you to validate and experiment with your setup before connecting to real organizations. Once you’ve registered on the Developer Portal, you can follow [this guide](https://developer.xero.com/documentation/development-accounts/#accessing-the-xero-demo-company) to access the demo environment. ## Connect Xero To activate a connection with Xero, users will have to go through the following steps: * French article: [Help Center - Xero - FR](https://help.chift.app/articles/9332701143-xero?lang=fr) * English article: [Help Center - Xero - EN](https://help.chift.app/articles/9332701143-xero?lang=en) ## Rate limits Limits apply to API calls per tenant (organisation, account, or practice): * **Concurrent:** 5 calls at a time * **Per Minute:** 60 calls * **Total App Minute**: 10,000 calls (Total across all connected tenants) * **Daily:** 5,000 calls Across all tenants, your app is limited to **10,000 calls per minute**.
(See Xero’s [documentation](https://developer.xero.com/documentation/guides/oauth2/limits/#api-rate-limits) for more details.) ## Technical limitations / specificities ### Suppliers In Xero, **all suppliers are contacts**. A contact is initially neutral. It is treated as a supplier **once a supplier invoice is linked to it**. Contacts can also act as customers simultaneously; the supplier role is **inferred from activity**, not stored as a separate entity. ## Coverage ## Troubleshooting ### Specific errors for Xero: | Error Code | Error description | Resolution | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------- | | ERROR\_ACCOUNT\_TYPE\_NOT\_ALLOWED | Journal entries can only be linked to general ledger accounts in Xero. | Use only general ledger accounts for journal entries. | | ERROR\_INVALID\_BALANCE\_RANGE | Xero doesn't support the 'start' parameter in balance retrieval. Balances can only be retrieved YTD (from the start of the current fiscal year). | Use the start of the current fiscal year as the date parameter for balance retrieval. | # Yuki Source: https://docs.chift.eu/connectors/accounting/yuki ## Introduction Yuki is a cloud-based accounting platform designed to streamline collaboration between businesses and their accounting partners. It offers an intuitive interface, powerful automation features, and real-time financial insights to make accounting more efficient and transparent.\ By centralizing financial data and automating administrative tasks, Yuki helps businesses focus on growth while improving the quality and speed of their accounting processes. ## Configure Yuki ### Prerequisite(s) * Obtain a **Partner API Key** from Yuki. ### Process We can provide and manage the API key for you.\ Simply contact our support team and we’ll handle the configuration directly on your Chift platform. * Faster setup process * No manual configuration required Your clients will see **Chift** (instead of your company) when authorizing the connection ## Test Yuki We can provide access to a shared sandbox environment to help you test your integration with Yuki before going live.\ ⚠️ Access is available **on request** and **subject to usage conditions**, as this is a shared testing environment. Please reach out to us to request sandbox access. ## Connect Yuki To activate a connection with Yuki, users will have to go through the following steps. * French article: [Help Center - Yuki - FR](https://help.chift.app/articles/8136429247-yuki?lang=fr) * English article: [Help Center - Yuki - EN](https://help.chift.app/articles/8136429247-yuki?lang=en) ## Rate limits The Yuki API has a daily limit of 1000 calls a day for each domain. To increase the number of available web service calls, a user with the “Portal administrator” role has the option to add one of the following accountant features to the domain: * Yuki Webservice: up to 5000 calls/domain for 10€/month * Yuki Webservice extended: up to 10.000 calls/domain for 100€/month More information on the [Yuki Website](https://support.yuki.nl/en/support/solutions/articles/80000787845-set-up-web-services-in-domain-and-or-administration) ## Coverage ## Troubleshooting ### Specific errors for Yuki: | Error Code | Error description | Resolution | | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | | ERROR\_ACCOUNT\_NUMBER\_NOT\_GOOD\_SCOPE | Journal entries cannot use ledger accounts starting with 10xxx, 11xxx, 120xx, 125xx, or 15xxx in Yuki. | Use a compatible account number for journal entries. | | ERROR\_ACCOUNT\_TYPE\_NOT\_ALLOWED | Journal entries can only be linked to general ledger accounts in Yuki. | Use only general ledger accounts for journal entries. | | ERROR\_CUSTOMER\_INVOICE\_PDF\_REQUIRED | An invoice number must be specified when attaching a PDF on customer invoices in Yuki. | Provide an invoice number when creating a customer invoice with an attachment. | | ERROR\_INVALID\_BODY | You cannot update an analytic account name in Yuki. Yuki also has a uniqueness constraint on the 'name' attribute for analytic accounts. | Avoid updating analytic account names and ensure analytic account names are unique. | | ERROR\_JOURNAL\_NOT\_GOOD\_SCOPE | The journal cannot be used for this scope in Yuki. | Use a journal that is compatible with the requested document type. | | ERROR\_SUPPLIER\_INVOICE\_PDF\_REQUIRED | You need to attach a PDF when creating a supplier invoice in Yuki. | Attach a PDF when creating supplier invoices. | | ERROR\_WRONG\_TAX\_CODE\_COMBINATION | National, European, and international VAT codes cannot be combined in one invoice in Yuki. | Use only one category of VAT codes per invoice (all national, all European, or all international). | | ERROR\_YUKI\_ANALYTIC\_DISTRIBUTION | Using multiple analytic accounts or analytic plans in a single invoice is not allowed in Yuki. | Use only one analytic account and one analytic plan per invoice. | # Banking API - Coverage Source: https://docs.chift.eu/connectors/banking/coverage # Banking connectors overview Source: https://docs.chift.eu/connectors/banking/overview | Connector | Geography | Partner Approval | Status | | --------- | --------- | ---------------- | ------ | | Ponto | 🇧🇪 (BE) | ✅ Yes | ✅ Live | # Ponto Source: https://docs.chift.eu/connectors/banking/ponto }> Website: [Ponto](https://www.myponto.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🇧🇪 Belgium ## Introduction Ponto can be used to connect to a lot of banks. It will be able to retrieve your bank transactions and the balance of your connected bank accounts. ## Configure Ponto **Prerequisite(s)** You need a pair of keys (clientId & ClientSecret) from Ponto to set up the connector. ## Test Ponto ## Connect Ponto To activate a connection with Ponto, users will have to go through the following steps. * French article: [Help Center - Ponto FR](https://help.chift.app/fr/articles/9546380-ponto) * English article: [Help Center - Ponto EN](https://help.chift.app/en/articles/9546380-ponto) ## Ponto coverage # Overview of connectors in Chift Source: https://docs.chift.eu/connectors/connectors ## Accounting }> Explore ACD }> Explore AFAS Software }> Explore Cegid Loop }> Explore Cegid Quadra }> Explore Datev }> Explore Dynamics 365 Business Central }> Explore e-Boekhouden }> Explore VISMA eAccounting }> Explore Exact Online }> Explore Fiken }> Explore Fulll }> Explore Holded }> Explore Horus }> Explore Inqom }> Explore Lexoffice }> Explore Minox }> Explore Moneybird }> Explore MyUnisoft }> Explore Netsuite }> Explore Octopus }> Explore Odoo }> Explore Pennylane }> Explore QuickBooks Accounting }> Explore Reviso }> Explore Sage 50 FR }> Explore Sage 100 FR }> Explore Sage Bob 50 }> Explore Sage Generation Expert }> Explore Sage Intacct }> Explore SnelStart }> Explore Tiime }> Explore Tripletex }> Explore Twinfield }> Explore Yuki }> Explore Winbooks }> Explore Xero }> Explore Lexoffice }> Explore sevdesk ## Ecommerce }> Explore Amazon Seller }> Explore Prestashop }> Explore Shopify }> Explore Woocommerce ## Invoicing }> Explore Axonaut }> Explore Boondmanager }> Explore Chargebee }> Explore Evoliz }> Explore Digiforma }> Explore Factomos }> Explore Harvest }> Explore Hyperline }> Explore Odoo Invoicing }> Explore Paypal }> Explore Qonto }> Explore Quickbooks }> Explore Sage100 Invoicing }> Explore Sellsy }> Explore Teamleader }> Explore Vos Factures }> Explore Zoho One }> Explore Billit }> Explore Dolibarr ## POS }> Explore Abill }> Explore Addictill }> Explore Agora }> Explore Apitic }> Explore Atilla }> Explore BDP }> Explore Carrepos }> Explore Cashmag }> Explore Cashpad }> Explore Cegid Retail }> Explore Clyo Systems }> Explore Connectill }> Explore Fastmag }> Explore Fülle }> Explore helloCash }> Explore Hiboutik }> Explore Innovorder }> Explore Jalia (by JDC) }> Explore L'addition }> Explore LastApp }> Explore Leo2 }> Explore Lightspeed }> Explore MplusKASSA }> Explore MyPOS Cash Register }> Explore Numier }> Explore PI Electronique }> Explore Odoo POS }> Explore Popina }> Explore Planity }> Explore Restomax }> Explore Revo }> Explore Shopcaisse }> Explore Simphony }> Explore Square }> Explore Shopify }> Explore SumUp }> Explore Synapsy }> Explore Tactilpad }> Explore Tiller }> Explore Trivec }> Explore Zelty }> Explore Zettle ## PMS }> Explore Mews }> Explore Noovy }> Explore Opera }> Explore Thaïs ## Payment }> Explore Airwallex }> Explore GoCardLess }> Explore Lightspeed }> Explore Mollie }> Explore Paypal }> Explore Square }> Explore Shopify }> Explore Stripe }> Explore SumUp }> Explore Zettle ## Banking }> Explore Ponto # Amazon Seller API Source: https://docs.chift.eu/connectors/ecommerce/amazon }> Website: [sell.amazon.com](https://sell.amazon.com)\ Software type: Solution as a Software (SaaS)\ Geography: 🌍 Worldwide ## Introduction Amazon Seller Central is the web interface used by brands and merchants to market and sell their products directly to Amazon's customers. The Amazon Selling Partner API (SP-API) is a REST-based API that helps Amazon selling partners programmatically access their data on orders, shipments, payments, inventory, and much more. Deliver the Amazon integration your customers want in no time. ## Configure Amazon **Prerequisite(s)** * A publicly accessible website describing your application and services * The API roles your integration requires (we recommend selecting all roles) **Activation Process** ### Step 1 — Create a Solution Provider Portal account 1. Go to [developer.amazonservices.com](https://developer.amazonservices.com) and click **Create developer account** 2. Sign in with your Amazon account or create a new one 3. Complete the **identity verification** process (takes approximately 20 minutes)\ You can find as well the full documentation [here](https://developer-docs.amazon.com/sp-api/docs/register-as-a-public-developer) ### Step 2 — Complete your developer profile Once your account is created, you must complete your developer profile before creating an app: 1. In the **Solution Provider Portal**, go to **Settings** → **Developer Profile** (or select **Proceed to Developer Profile** if prompted) 2. Fill in all required sections: * **Contact information**: organization name, website URL, country, primary contact details * **Data Access**: select **Public Developer** — *"I build and offer publicly available applications that are used by other sellers"* * **Roles**: select all roles your integration requires (you don't need to select roles that require extra questions, like the Tax Invoicing/Remittance role) * **Use cases**: describe how you intend to use the SP-API * **Security controls**: answer all security practice questions (answers must reflect compliance with Amazon's Acceptable Use Policy, Data Protection Policy, and Solution Provider Agreement - Please ask Chift for help if needed) 3. Check the acknowledgment box, review the policies, and click **Register** 4. Wait for Amazon's approval — they will contact you via email. You must respond to any requests within five days ### Step 3 — Create an app client Once your developer profile is approved: 1. In the **Solution Provider Portal**, select **Develop Apps** from the top navigation to access **Developer Central** 2. Click **Add new app client** 3. Fill in the app client form: * **App name**: enter a meaningful name (e.g., your company name) * **API type**: select **SP API** * **Business entity**: select **Sellers** (or Vendors, or both, depending on your use case) * **Roles**: select all roles that your integration requires. We recommend selecting all available roles to ensure uninterrupted access to the API 4. In the **OAuth credentials** section: * **OAuth Login URI**: enter `https://chift.app/oauth2/redirect` * **Redirect URI**: enter `https://chift.app/oauth2/redirect` 5. Click **Save and exit** The app will remain in "draft" but can be used as such. ### Step 4 — Retrieve your credentials 1. In **Developer Central**, find your newly created app and click **Edit app** 2. Under **LWA credentials**, click **View** to reveal: * **Client ID** — your application's unique identifier * **Client Secret** — your application's secret key. Note that you will need to rotate your Client Secret as the client secret is expiring after 180 days Keep these credentials safe. You will need them to configure the connector in Chift. ### Step 5 — Configure the connector in Chift Enter the **Client ID** and **Client Secret** in the Amazon connector settings on your Chift account to enable the connector. ## Test Amazon To test the integration, you can use the SP-API sandbox environment. Amazon provides sandbox endpoints that simulate API responses without affecting live data. Refer to the [SP-API sandbox documentation](https://developer-docs.amazon.com/sp-api/docs/the-selling-partner-api-sandbox) for details on how to configure sandbox calls. ## Connect Amazon To activate a connection with Amazon Seller API, users will have to go through the following steps. * French article: [Help Center - Amazon Seller API FR](https://help.chift.app/articles/1936754401-amazon-seller?lang=fr) * English article: [Help Center - Amazon Seller API EN](https://help.chift.app/articles/1936754401-amazon-seller?lang=en) ## Limitations & Exceptions * A professional selling plan is required to use the SP-API * Public applications are subject to Amazon's authorization limits and may require an Appstore listing * Rate limits apply per API operation — refer to the [SP-API usage plans documentation](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api) for details * Amazon will ask [fees](https://developer.amazonservices.com/spp-announcement) in the future for the usage of the API ## Amazon coverage # E-commerce API - Coverage Source: https://docs.chift.eu/connectors/ecommerce/coverage # eCommerce connectors overview Source: https://docs.chift.eu/connectors/ecommerce/overview | Connector | Geography | Partner Approval | Status | | ----------- | ------------ | ---------------- | ------ | | Magento | 🌎 Worldwide | ❌ No | ✅ Live | | Prestashop | 🇫🇷 (FR) | ❌ No | ✅ Live | | Shopify | 🌎 Worldwide | ✅ Yes | ✅ Live | | WooCommerce | 🌎 Worldwide | ❌ No | ✅ Live | # Prestashop Source: https://docs.chift.eu/connectors/ecommerce/prestashop }> Website: [prestashop.fr](https://prestashop.fr/)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction PrestaShop is an open-source e-commerce platform that allows businesses of all sizes to create and manage their online stores. It offers a wide range of customizable features, including product management, payment processing, and marketing tools, enabling users to build a tailored shopping experience. ## Configure Prestashop **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Prestashop To test the software integration, you need to host a Prestashop test account. Recommendation: test with a client account ## Connect Prestashop To activate a connection with Prestashop, users will have to go through the following steps. * French article: [Help Center - Prestashop FR](https://help.chift.app/articles/9219870794-prestashop?lang=fr) * English article: [Help Center - Prestashop EN](https://help.chift.app/articles/9219870794-prestashop?lang=en) ## Prestashop coverage # Shopify (Ecommerce) Source: https://docs.chift.eu/connectors/ecommerce/shopify }> Website: [shopify.com](https://www.shopify.com)\ Software type: Solution as a Software (Saas)\ Geography: 🌍 Worldwide ## Introduction Shopify is a comprehensive e-commerce platform that allows businesses of all sizes to create, manage, and scale their online stores. It offers a wide range of features, including customizable storefronts, payment processing, inventory management, and marketing tools. Shopify is known for its ease of use, extensive app integrations, and scalability, making it a popular choice for entrepreneurs and established businesses looking to sell products online and across multiple sales channels. ## Configure Shopify **Prerequisite(s)** You have two options to enable Shopify for your customers: * Public app: * Obtain a Client ID and Client Secret to set up the connector Shopify * Get Shopify’s approval for your partner application. This is a long and difficult process. * Authentication is easy for your client. Your app can be listed or unlisted. * Private app: * No prerequisite to activate the connector. * Your end-users need to create a custom app to be able to authenticate (this is documented in our [help guides](https://help.chift.app/articles/1709525914-shopify?lang=en)). Depending on your choice, you will be able to activate the connector in Chift: * Enter client id / client secret if you went for option 1 (Enable OAuth2) * Otherwise do not check "Enable OAuth2" and enable the connector Description of both apps is described [here](https://help.shopify.com/en/manual/apps/app-types). **Activation Process** This is the process if you want to create a public app: 1. Create your partner account using this [link](https://accounts.shopify.com/signup) 2. On your Partner account, create an API and OAuth2 application. * [Create an account](https://partners.shopify.com/signup/developer) on the Shopify Partners site * Click on 'Apps' in the side panel * Click on 'Create app' on the 'Apps' page * Click on 'Create app manually' * Fill in the 'General settings' * Add [https://chift.app/oauth2/redirect](https://chift.app/oauth2/redirect) in the 'Allowed redirection URL(s)' section * Click on 'Create app' * If you want to retrieve orders older than 60 days: Go to the 'App setup' page and click on 'Request access' of the 'Read all orders' box 3. Configure your OAuth2 application and select the scope "read\_all\_orders". This is done in the parameters of your Shopify account. * Menu → “API Access” → select “read all orders” to get a response for orders older than 60 days. * In the same section “API Access” → Subsection “Protected customer data access”, select the consumer data you need Shopify to communicate in the API response. 4. Get your application approved by Shopify - To submit your app for approval, you have to: * Go to the 'Distribution' page of your newly created Shopify app * Click on 'Choose Shopify App Store' * Click on 'Choose' * Click on 'Create listing' * Register to the Shopify App Store (only needed if it is your first Shopify app) * Click on 'App visibility' * Select 'Unlisted' in the dialog box and click on 'Save' * Configure Shopify on your Chift account. ## Test Shopify To test the software integration, you have the capability to create a sandbox account, within your Shopify partner portal (where you created the OAuth2 application). ## Connect Shopify To activate a connection with Shopify, users will have to go through the following steps. * French article: [Help Center - Shopify FR](https://help.chift.app/articles/1709525914-shopify?lang=fr) * English article: [Help Center - Shopify EN](https://help.chift.app/articles/1709525914-shopify?lang=en) ## Handle customer data protection The new version of the Shopify API introduced a [customer data protection](https://shopify.dev/apps/store/data-protection/protected-customer-data) policy. This policy requires App creators to ask authorization to be able to retrieve customer data from Shopify. Without this authorization you will not be able to retrieve customers and orders from Shopify. The policy consists of two levels. With the first level you will be able to retrieve customers and orders but with limited data (you don't have access to the name, email, addresses and phone number of the customers). The second level gives you access to all the customer data. Each level is linked to specific requirements. You can find more information about the customer data protection policy and the requirements on the [Shopify dedicated documentation](https://shopify.dev/apps/store/data-protection/protected-customer-data). To be able to use all the functionalities offered by the eCommerce API you have to meet the level 2 requirements. The customer data protection settings can be modified via your 'App setup' page. shopify1 ## Shopify coverage # WooCommerce Source: https://docs.chift.eu/connectors/ecommerce/woocommerce }> Website: [woocommerce.com](https://woocommerce.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🌍 Worldwide ## Introduction WooCommerce is an open-source flexible software solution built for WordPress-based websites. It’s commonly used to create online e-commerce shops. Deliver the WooCommerce integration your customers want in no time. ## Configure WooCommerce **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test WooCommerce To test the software integration, If you need to test WooCommerce specifically, Chift’s advice is to identify a beta tester in your clients that is willing to allow you to use the client’s WooCommerce account for you to conduct some tests. ## Connect WooCommerce To activate a connection with WooCommerce, users will have to go through the following steps. * French article: [Help Center - WooCommerce FR](https://help.chift.app/articles/8963154419-woocommerce?lang=fr) * English article: [Help Center - WooCommerce EN](https://help.chift.app/articles/8963154419-woocommerce?lang=en) ## Limitations & Exceptions Gift Cards are not part of the standard WooCommerce library. Therefore, we currently only support the following Gift Card plugins: * [Gift Cards for WooCommerce](https://woocommerce.com/products/gift-cards/) developed by Woo * Version PRO of [PW WooCommerce GiftCard](https://www.pimwick.com/gift-cards/) developed by PimWick ## WooCommerce coverage # Axonaut Source: https://docs.chift.eu/connectors/invoicing/axonaut }> Website: [axonaut.com](https://axonaut.com/) Software type: Solution as a Software (Saas) Geography: 🇫🇷 France ## Introduction Axonaut helps small businesses streamline administrative processes related to customer relationship management (CRM), invoicing, marketing, inventory tracking, and more. Deliver the Axonaut integration your customers want in no time. ## Configure Axonaut **Prerequisite(s)** No prerequisite to enable the connector. **Activation Process** Activate the connector in one click on the connector section in your Chift account. ## Test Axonaut To test the software integration, you can create your demo account [here](https://axonaut.com/onboarding/). ## Connect Axonaut To activate a connection with Axonaut, users will have to go through the following steps. * French article: [Help Center - Axonaut FR](https://help.chift.app/articles/4622970678-axonaut?lang=fr) * English article: [Help Center - Axonaut EN](https://help.chift.app/articles/4622970678-axonaut?lang=en) ## Limitations & Exceptions * The distinction between refunds and invoices is based on the sign of the total amount, if negative it is considered as a refund. ## Axonaut coverage ## Troubleshooting ### Specific errors for Axonaut: | Error Code | Error description | Resolution | | ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | | ERROR\_BACKEND\_FORBIDDEN | Impossible to retrieve data due to a permission issue. Unauthorized action. User is not enabled or you need one of these roles: ROLE\_MANAGER, ROLE\_ACCOUNTING, ROLE\_BUSINESS, ROLE\_BUSINESS\_MANAGER | Use another API token in the Axonaut connection of the consumer | # Billit Source: https://docs.chift.eu/connectors/invoicing/billit }> Website: [billit.be](https://www.billit.be/)\ Software type: Solution as a Software (Saas)\ Geography: 🇧🇪 Belgium ## Introduction Billit is an invoicing and accounting platform that automates e-invoicing workflows. ## Configure Billit **Prerequisite(s)** * Contact your CSM to enable the connector. Chift can provide credentials to activate the connector. * If needed, you can ask Billit for your own application: * Contact [support@billit.be](mailto:support@billit.be) to obtain OAuth2 Client ID & Secret. You will need to do this for both a sandbox and production set of keys. See [here](https://docs.billit.be/docs/how-do-i-request-oauth-client-id-and-secret) on how to proceed and what you need to ask for information. * Provide the redirect URL: [https://chift.app/oauth2/redirect](https://chift.app/oauth2/redirect) * Follow Billit's [authentication documentation](https://docs.billit.be/docs/how-do-i-request-oauth-client-id-and-secret) for additional details **Activation Process** * Activate the connector in Chift and select the environment (Sandbox or Production) * Configure the connector using your credentials ## Test Billit Create a sandbox account at [Billit Sandbox](https://my.sandbox.billit.be) and use it for testing your integration. ## Connect Billit To activate a connection with Billit, users will have to go through the following steps. * French article: [Help Center - Billit FR](https://help.chift.app/articles/3321040439-billit?lang=fr) * English article: [Help Center - Billit EN](https://help.chift.app/articles/3321040439-billit?lang=en) ## Limitations & Exceptions * The creation of invoices of type `supplier_invoice` and `supplier_refund` are not supported ## Billit coverage # Boondmanager Source: https://docs.chift.eu/connectors/invoicing/boondmanager }> Website: [boondmanager.com](https://www.boondmanager.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🇪🇺 Europe ## Introduction BoondManager is an enterprise process management (ERP) and resource management software that helps businesses manage projects, track invoices, handle prospecting, monitor expenses, and more on a centralised platform. Deliver the Boondmanager integration your customers want in no time. ## General Information ## Configure Boondmanager **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Boondmanager To test the software integration, you can create your demo account [here](https://www.boondmanager.com/testez-nous/). ## Connect Boondmanager To activate a connection with Boondmanager, users will have to go through the following steps. * French article: [Help Center - Boondmanager FR](https://help.chift.app/articles/9731331571-boondmanager?lang=fr) * English article: [Help Center - Boondmanager EN](https://help.chift.app/articles/9731331571-boondmanager?lang=en) ## Limitations & Exceptions * The partner is not always present on the expenses/invoices. ## Boondmanager coverage # Chargebee Source: https://docs.chift.eu/connectors/invoicing/chargebee }> Website: [chargebee.com](https://www.chargebee.com/) Software type: Solution as a Software (Saas) Geography: 🌍 Worldwide ## Introduction Chargebee is a billing platform for SaaS and subscription-based businesses. Chargebee integrates with leading payment gateways around the world to let you automate payment collection, invoicing, email notifications, and customer management. Deliver the Chargebee integration your customers want in no time. ## Configure Chargebee **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Chargebee To test the software integration, you can create your demo account [here](https://www.chargebee.com/trial-signup). ## Connect Chargebee To activate a connection with Chargebee, users will have to go through the following steps. * French article: [Help Center - Chargebee FR](https://help.chift.app/articles/8784292226-chargebee?lang=fr) * English article: [Help Center - Chargebee EN](https://help.chift.app/articles/8784292226-chargebee?lang=en) ## Chargebee coverage # Invoicing API - Coverage Source: https://docs.chift.eu/connectors/invoicing/coverage # Digiforma Source: https://docs.chift.eu/connectors/invoicing/digiforma }> Website: [digiforma.com](https://www.digiforma.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction Digiforma is an all-in-one platform for easily managing your training business ## Configure Digiforma **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Digiforma To test the software integration, you can create your demo account [here](https://identity.digiforma.com/users/register). ## Connect Digiforma To activate a connection with Digiforma, users will have to go through the following steps. * French article: [Help Center - Digiforma FR](https://help.chift.app/articles/7239404955-digiforma?lang=fr) * English article: [Help Center - Digiforma EN](https://help.chift.app/articles/7239404955-digiforma?lang=en) ## Digiforma coverage # Dolibarr Source: https://docs.chift.eu/connectors/invoicing/dolibarr }> Website: [dolibarr.org](https://www.dolibarr.org/)\ Software type: Open Source (On-premise / Cloud)\ Geography: 🌍 Global ## Introduction Dolibarr is an open source ERP and CRM platform designed for businesses of all sizes. It provides integrated solutions for managing sales, accounting, inventory, and invoicing. Deliver the Dolibarr integration your customers want in no time. ## Configure Dolibarr **Prerequisite(s)** * No prerequisite to enable the connector. * Note that the connector supports as well multi-company. This is up to the end-user to activate depending on whether he has the module. He will then be able to select a specific entity. **Activation Process** Activate the connector in Chift and configure it with your Dolibarr instance credentials. ## Test Dolibarr Install a local instance or create a cloud account at [Dolibarr](https://www.dolibarr.org/) for testing your integration. ## Connect Dolibarr To activate a connection with Dolibarr, users will have to go through the following steps. * French article: [Help Center - Dolibarr FR](https://help.chift.app/articles/3219095951-dolibarr?lang=fr) * English article: [Help Center - Dolibarr EN](https://help.chift.app/articles/3219095951-dolibarr?lang=en) ## Limitations & Exceptions * Supported versions: v21, v22 * Modules need to be installed so that everything works perfectly. This is as well tested by our connector. See the documentation above. ## Dolibarr coverage # EBP Gestion Commerciale Source: https://docs.chift.eu/connectors/invoicing/ebp ## Introduction EBP Gestion Commerciale is an invoicing tool, part of the EBP software suite, used mainly by small and medium-sized businesses in France. ## Configure EBP **Prerequisite(s)** No prerequisites to enable the connector. **Activation Process** Activate the connector in one click from the connector section in your Chift account. ## Test EBP To test the integration, create an EBP Gestion Commerciale account on the [EBP website](https://www.ebp.com/logiciel-facturation/gestion-commerciale-pro/) by clicking "**Testez le logiciel"** and follow the steps. ## Connect EBP * French article: [Help Center - EBP FR](https://help.chift.app/articles/1801774333-ebp?lang=fr) * English article : [Help Center - EBP EN](https://help.chift.app/articles/1801774333-ebp?lang=en) ## Coverage # Evoliz Source: https://docs.chift.eu/connectors/invoicing/evoliz }> Website: [evoliz.com](https://www.evoliz.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction Evoliz enables real-time online management throughout the year and generates company accounting. Deliver the Evoliz integration your customers want in no time. ## Configure Evoliz **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Evoliz To test the software integration, you can create your demo account [here](https://www.evoliz.com/inscription.php). ## Connect Evoliz To activate a connection with Evoliz, users will have to go through the following steps. * French article: [Help Center - Evoliz FR](https://help.chift.app/articles/4571541738-evoliz?lang=fr) * English article: [Help Center - Evoliz EN](https://help.chift.app/articles/4571541738-evoliz?lang=en) ## Evoliz coverage # Factomos Source: https://docs.chift.eu/connectors/invoicing/factomos }> Website: [factomos.com](https://factomos.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction Factomos is a cloud-based solution designed to help businesses manage billing and invoicing operations. The platform enables organizations to create quotes and invoices and link them with banking services to streamline financial activities. Deliver the Factomos integration your customers want in no time. ## Configure Factomos **Prerequisite(s)** * You need an Oauth 2 application to enable the connector. * Activate the Factomos integration on the Chift platform. **Activation Process** Ask Chift to encode the partner key or request for a dedicated Oauth2 application. ## Test Factomos To test the software integration, you can create your demo account [here](https://www.factomos.com/). ## Connect Factomos To activate a connection with Factomos, users will have to go through the following steps. * French article: [Help Center - Factomos FR](https://help.chift.app/articles/4955899463-factomos?lang=fr) * English article: [Help Center - Factomos EN](https://help.chift.app/articles/4955899463-factomos?lang=en) ## Factomos coverage # HubSpot Source: https://docs.chift.eu/connectors/invoicing/hubspot } /> # Introduction HubSpot is a CRM platform with all the software, integrations, and resources you need to connect marketing, sales, content management, and customer service. ## Setup In order to activate the Hubspot connector you will have to: * Create an app on Hubspot * Submit your app for review * Activate the Hubspot integration on the Chift platform ### Create an app on Hubspot Developer Center 1. Log in to [Hubspot](https://developers.hubspot.com/) 2. Click on `Create app`. 3. Enter a unique name and fill [https://chift.app/oauth2/redirect](https://chift.app/oauth2/redirect) in the field `Redirect URLs` 4. Click on `Create app` 5. Keep safe your `Client ID` and `Client Secret` because you won't be able to see them again. 6. You will need the `Client ID` and `Client Secret` below ### Activate the Hubspot integration on the Chift platform 1. With the `Client ID` and `Client Secret` that you have generated in the previous steps, you can enable the Hubspot connector by going to 'Connectors' tab 2. Open the 'Connectors' tab 3. Activate the Hubspot integration and click on "View connector" 4. Enter the `Client ID` and `Client Secret` that you have obtained in the previous steps and save. ## Limitations * Invoices are not present. They are represented as 'opportunities' in Hubspot. ## Hubspot coverage # Hyperline Source: https://docs.chift.eu/connectors/invoicing/hyperline }> Website: [hyperline.co](https://www.hyperline.co/)\ Software type: Solution as a Software (SaaS)\ Geography: 🌍 Worldwide ## Introduction Hyperline is a revenue management platform that unifies quote-to-cash in one system. It covers CPQ (configure-price-quote), flexible billing and subscriptions, and usage-based pricing—with support for flat fees, tiers, and enterprise contracts. Hyperline automates invoicing, payment collection, and revenue recognition, and offers e-invoicing compliance in 80+ countries. Deliver the Hyperline integration your customers need to connect billing with their existing stack. ## Configure Hyperline **Prerequisite(s)** * Activate the Hyperline integration on the Chift platform: * You can choose to activate it in one click: The end user will have to generate an API key * You can choose to use OAuth2: See here how to generate an [application](https://docs.hyperline.co/api-reference/docs/third-party-app). This is the preferred way. Chift can provide you with a client id/secret if needed. **Activation Process**\ Activate the connector in the connector section in your Chift account. Contact your CSM if you need dedicated credentials or partner setup. ## Test Hyperline To test the software integration, you can sign up for a free trial on [Hyperline](https://www.hyperline.co/) (no credit card required for the trial). ## Connect Hyperline To activate a connection with Hyperline, users will have to go through the following steps. * French article: [Help Center - Hyperline FR](https://help.chift.app/articles/2892966359-hyperline?lang=fr) * English article: [Help Center - Hyperline EN](https://help.chift.app/articles/2892966359-hyperline?lang=en) ## Hyperline coverage # Odoo (Invoicing) Source: https://docs.chift.eu/connectors/invoicing/odoo-invoicing }> Website: [odoo.com](https://www.odoo.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🌍 Worldwide ## Introduction Odoo Invoicing is a cloud-based invoicing software that simplifies the creation, management, and tracking of invoices for businesses of all sizes. It features automated invoice generation and payment tracking. Odoo Invoicing is designed to streamline the billing process, reduce administrative workload, and improve cash flow management. ## Configure Odoo **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Odoo To test the software integration, you can create your demo account [here](https://www.odoo.com/fr_FR/trial). (You need to get a free trial on the plan named “Personnalisé” to benefit from the API.) ## Connect Odoo To activate a connection with Odoo, users will have to go through the following steps. * French article: [Help Center - Odoo FR](https://help.chift.app/articles/7745146894-odoo-invoicing?lang=fr) * English article: [Help Center - Odoo EN](https://help.chift.app/articles/7745146894-odoo-invoicing?lang=en) ## Limitations and exceptions * You need the CRM app to be installed to access your opportunities/leads. * You can connect only one company per consumer (one company = one consumer). * We support all Odoo versions as of 13.0. ## Odoo Invoicing coverage # Invoicing connectors overview Source: https://docs.chift.eu/connectors/invoicing/overview | Connector | Geography | Partner Approval | Status | | ---------------------------- | ------------------------------------------ | ---------------- | ------ | | Axonaut | 🇫🇷 (FR) | ❌ No | ✅ Live | | Boondmanager | 🇫🇷 (FR) | ❌ No | ✅ Live | | Chargebee | 🌎 Worldwide | ❌ No | ✅ Live | | Digiforma | 🇫🇷 (FR) | ❌ No | ✅ Live | | Evoliz | 🇫🇷 (FR) | ❌ No | ✅ Live | | Factomos | 🇫🇷 (FR) | ✅ Yes | ✅ Live | | Fatture in Cloud | 🇮🇹 (IT) | ✅ Yes | ✅ Live | | Fuga | 🇧🇪 (BE), 🇱🇺 (LU), 🇳🇱 (NL) | ✅ Yes | ✅ Live | | Harvest | 🇫🇷 (FR), 🇬🇧 (UK) | ✅ Yes | ✅ Live | | Hubspot | 🇪🇺 Europe | ✅ Yes | ✅ Live | | Hyperline | 🌍 Worldwide | ❌ No | ✅ Live | | Odoo Invoicing | 🇧🇪 (BE), 🇨🇭 (CH), 🇫🇷 (FR), 🇱🇺 (LU) | ❌ No | ✅ Live | | Paypal | 🌎 Worldwide | ❌ No | ✅ Live | | Qonto | 🇪🇺 Europe | ✅ Yes | ✅ Live | | Quickbooks | 🌎 Worldwide | ✅ Yes | ✅ Live | | Sage 100 Gestion Commerciale | 🇪🇺 Europe | ❌ No | ✅ Live | | Sellsy | 🇫🇷 (FR) | ✅ Yes | ✅ Live | | TeamLeader | 🇫🇷 (FR) | ✅ Yes | ✅ Live | | Vos Factures | 🇫🇷 (FR) | ❌ No | ✅ Live | | Zoho One | 🇪🇺 Europe | ✅ Yes | ✅ Live | # Paypal (Invoicing) Source: https://docs.chift.eu/connectors/invoicing/paypal }> Website: [paypal.com](https://www.paypal.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🌍 Worldwide ## Introduction Paypal is an online financial service that enables you to pay for items using a secure internet account. You simply add your bank account, credit card or debit card details and whenever you pay using PayPal, you can choose which of your cards or accounts it pays with. Deliver the Paypal integration your customers want in no time. ## Configure Paypal **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Paypal To test the software integration, you can create your demo account [here](https://developer.paypal.com/tools/sandbox/accounts). ## Connect Paypal To activate a connection with Paypal, users will have to go through the following steps. * French article: [Help Center - Paypal FR](https://help.chift.app/articles/7401984901-paypal?lang=fr) * English article: [Help Center - Paypal EN](https://help.chift.app/articles/7401984901-paypal?lang=en) ## Paypal coverage # Qonto Source: https://docs.chift.eu/connectors/invoicing/qonto }> Website: [qonto.com](https://qonto.com/fr)\ Software type: Solution as a Software (Saas)\ Geography: 🇪🇺 Europe ## Introduction Qonto is a European business finance solution. It offers banking, financing, bookkeeping and spend management solutions to SMEs and Freelancers. ## Configure Qonto **Prerequisite(s)** * Register account on the [Qonto Developer Portal](https://developers.qonto.com/) * Obtain a Client ID, secret, staging token from Qonto. **The connector requires an Oauth2** authentication, which needs to be configured by Qonto. * Approval from Qonto is needed before going live (Production environment). * Activate the Qonto integration on the Chift platform. **Activation Process** **I. Obtain Sandbox Credentials (Client ID, Secret, Staging Token)** To access Qonto's sandbox environment and test the integration with Chift, follow the steps below: 1. **Create an App on the Qonto Developer Portal** * Go to the [Qonto Developer Portal](https://developers.qonto.com/). * Sign up and create a new application to obtain your access credentials. * This will give you the necessary credentials to authenticate with the Sandbox environment. 2. **Select the Integration Type** * Choose the option: **"Connect your customers Qonto accounts to your platform."** 3. **Fill in Application Details** * Upload your **logo** * Enter the **application name** * Add the **redirect URI**: `https://chift.app/oauth2/redirect` 4. **Select the Required Scopes**\ To ensure the Chift connector functions properly, request the following scopes: | **Scope** | **Purpose** | | :----------------------- | :------------------------------------ | | `organization.read` | Access basic organization information | | `client.read` | View existing customers | | `client.write` | Create new customers | | `client_invoices.read` | Access customer invoices | | `client_invoices.write` | Create customer invoices | | `supplier_invoice.read` | Access supplier invoices | | `supplier_invoice.write` | Create supplier invoices *(optional)* | 5. **Get Your Sandbox Credentials**\ Once the app is created, Qonto will automatically generate and display your sandbox credentials: * `client_id` * `client_secret` * `x-qonto-staging-token` **II. Obtain Production Credentials** > **Important:** You must first complete the sandbox setup before requesting production credentials. 1. **Request Production Access in the Developer Portal** * In your Qonto app dashboard, switch to the **Production** tab. * Click **“Release my app”** to begin the production access request. 2. **Reconfirm App Information**\ You will need to re-enter your application details: * Logo * Application name * Redirect URI: `https://chift.app/oauth2/redirect` 3. **Approval Process by Qonto**\ Qonto will reach out to validate your application and understand your integration use case. This step is required before production access is granted. 4. **Receive Production Credentials**\ After approval, Qonto will send you a document containing your production credentials. This file will include: * `client_id` * `client_secret` * `x-qonto-staging-token` *(if your request was initially made in the sandbox)* Ensure the **redirect URIs** listed in their response exactly match the ones submitted in your app configuration. ## Connect Qonto To activate a connection with Qonto, users will have to go through the following steps. * French article: [Help Center - Qonto FR](https://help.chift.app/articles/1959523301-qonto?lang=fr) * English article: [Help Center - Qonto EN](https://help.chift.app/articles/1959523301-qonto?lang=en) ## Limitations & Exceptions * Qonto does not really support the notion of suppliers. ## Qonto coverage # QuickBooks (Invoicing) Source: https://docs.chift.eu/connectors/invoicing/quickbooks }> Website: [quickbooks.com](https://quickbooks.intuit.com/eu/) Software type: Solution as a Software (Saas) Geography: 🇪🇺 Europe ## Introduction QuickBooks allows you to keep track of financial functions like income and expenses, employee expenses and inventory in real-time and fulfill tax obligations hassle-free. Deliver the QuickBooks integration your customers want in no time. ## Configure QuickBooks **Prerequisite(s)** * Create an app on QuickBooks * Submit your app for approval (this step is only required if you want your app to be publicly available) * Activate the QuickBooks integration on the Chift platform **Activation Process** 1. Create an account - [here](https://quickbooks.intuit.com/ca/free-trial/) 2. Create your APP in QuickBooks in the developer's portal following these guidelines: * 1. Log in to [QuickBooks](https://developer.intuit.com/app/developer/myapps) * 2. Click on `CREATE AN APP` * 3. Select `com.intuit.quickbooks.accounting` scope * 4. Enter a unique name and fill [https://chift.app/oauth2/redirect](https://chift.app/oauth2/redirect) in the field `Redirection URLs` * 5. Select all permissions * 6. Click on `SAVE CHANGES` * 7. Keep safe your `Client ID`, `Client Secret` because you won't be able to see it again. * 8. You will need the `Client ID` and `Client Secret` afterwards quickbooks1 ## Test QuickBooks To test the software integration, a free account can be created on QuickBooks - [here](https://quickbooks.intuit.com/ca/free-trial/) ## Connect QuickBooks To activate a connection with QuickBooks, users will have to go through the following steps. * French article: [Help Center - QuickBooks FR](https://help.chift.app/articles/6530467301-quickbooks?lang=fr) * English article: [Help Center - QuickBooks EN](https://help.chift.app/articles/6530467301-quickbooks?lang=en) ## Limitations and exceptions * You can only connect to one of your companies per consumer (one consumer = one company). * Draft invoices are not available. * Opportunities/deals are not present. ## Quickbooks coverage # Sage 100 Gestion Commerciale Source: https://docs.chift.eu/connectors/invoicing/sage100 }> Website: [sage100.com](https://www.sage.com/fr-be/produits/sage-100/)\ Software type: On-premise (local agent to be installed)\ Geography: 🇫🇷 France\ Connector Status: Live ## Introduction Sage 100 is designed for mid-sized companies. It offers a wider range of features and capabilities than Sage 50, including more robust financial management, inventory management, and customer relationship management (CRM) capabilities. Deliver the Sage 100 integration your customers want in no time. ## Sage 100 Gestion Commerciale coverage # Sellsy Source: https://docs.chift.eu/connectors/invoicing/sellsy }> Website: [sellsy.com](https://go.sellsy.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction Sellsy is a comprehensive CRM solution. It manages every point of the sales process from prospecting to payment. Deliver the Sellsy integration your customers want in no time. ## Configure Sellsy **Prerequisite(s)** * Create an app on Sellsy * Submit your app for approval (this has to be done when you want to use the Sellsy connector with your customers) * Activate the Sellsy integration on the Chift platform **Activation Process** 1. Create an account - [here](https://www.sellsy.com/onboarding/quicktrial?lang=fr) 2. Create a public OAuth2 app on your demo account from this webpage (all scopes) 1. Log in to [Sellsy](https://www.sellsy.fr/developer/api-v2) 2. Click on `Create API access` in the 'API V2' tab 3. Select `Public` 4. Enter a unique name and fill [https://chift.app/oauth2/redirect](https://chift.app/oauth2/redirect) in the field `Redirection URLs` 5. Select all permissions 6. Click on `Save` 7. Keep safe your `Client ID`, `Client Secret` because you won't be able to see it again. 8. You will need the `Client ID` and `Client Secret` to encode these logins in your Chift App -> Connectors ## Test Sellsy To test the software integration, you can create your demo account [here](https://www.sellsy.com/onboarding/quicktrial). ## Connect Sellsy To activate a connection with Sellsy, users will have to go through the following steps. * French article: [Help Center - Sellsy FR](https://help.chift.app/articles/2058302311-sellsy?lang=fr) * English article: [Help Center - Sellsy EN](https://help.chift.app/articles/2058302311-sellsy?lang=en) ## Sellsy coverage # Teamleader Source: https://docs.chift.eu/connectors/invoicing/teamleader }> Website: [teamleader.eu](https://www.teamleader.eu/)\ Software type: Solution as a Software (Saas)\ Geography: 🇪🇺 Europe ## Introduction Teamleader removes the daily hassle of running a business. It lets you sell, bill and organise work in one place. It provides a perfect overview of ongoing sales opportunities, projects and payments, and a deep insight into how your business is really performing. Deliver the Teamleader integration your customers want in no time. ## Configure Teamleader: **Prerequisite(s)** * Create an app on Teamleader (and obtain a Client ID & secret) * Submit your app for approval (this has to be done when you want to use the Teamleader connector with your customers) * Activate the Teamleader integration on the Chift platform **Activation Process** 1. Create an account [here](https://signup.focus.teamleader.eu/?country=BE\&lang=fr) 2. Create an OAuth2 app on your demo account by following these guidelines (application must be approved by Teamleader) 1. Log in to [Teamleader](https://marketplace.focus.teamleader.eu/be/en/build/integrations) 2. Click on `CREATE NEW INTEGRATION` 3. Select `Public` 4. Enter a unique name and fill [https://chift.app/oauth2/redirect](https://chift.app/oauth2/redirect) in the field `Redirection URLs` 5. Select the relevant permissions (see picture below) 6. Click on `SAVE CHANGES` 7. Keep safe your `Client ID`, `Client Secret` because you won't be able to see it again. 8. You will need the `Client ID` and `Client Secret` afterwards teamleader1 ## Test Teamleader To test the software integration, you can create your demo account [here](https://signup.focus.teamleader.eu/?country=BE\&lang=fr). ## Connect Teamleader To activate a connection with Teamleader, users will have to go through the following steps. * French article: [Help Center - Teamleader FR](https://help.chift.app/articles/8298922599-teamleader?lang=fr) * English article: [Help Center - Teamleader EN](https://help.chift.app/articles/8298922599-teamleader?lang=en) ## Limitations & Exceptions * Invoices of type `supplier_refund` and `supplier_invoice` are not present. * Contacts of type `supplier` are not present and there is no difference between `prospect`and `customer` ## Teamleader coverage # Vos Factures Source: https://docs.chift.eu/connectors/invoicing/vosfactures }> Website: [vosfactures.fr](https://vosfactures.fr/)\ Software type: Solution as a Software (Saas)\ Geography: 🌍 Worldwide ## Introduction A comprehensive online invoicing solution with features for stock, payment, and reporting management. Deliver the Vos factures integration your customers want in no time. ## Configure Vos Factures **Prerequisite(s)**\ There are no prerequisites to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Vos Factures To test the software integration, you can create your demo account [here](https://app.vosfactures.fr/signup). ## Connect Vos Factures To activate a connection with Vos Factures, users will have to go through the following steps. * French article: [Help Center - Vos Factures FR](https://help.chift.app/articles/2054274996-vosfactures?lang=fr) * English article: [Help Center - Vos Factures EN](https://help.chift.app/articles/2054274996-vosfactures?lang=en) ## Vosfactures coverage # Zoho One Source: https://docs.chift.eu/connectors/invoicing/zoho }> Website: [zoho.com](https://www.zoho.com/fr/)\ Software type: Solution as a Software (Saas)\ Geography: 🌍 Worldwide ## Introduction Zoho CRM acts as a single repository to bring your sales, marketing, and customer support activities together, and streamline your process, policy, and people in one platform. Deliver the Zoho integration your customers want in no time. ## Configure Zoho One **Prerequisite(s)** * You need an OAuth 2.0 application registered in the [Zoho API Console](https://api-console.zoho.com/) to enable the connector. * Activate the Zoho One integration on the Chift platform. The **Client ID** and **Client Secret** required by the connector are **not** your Zoho account credentials (email/password). They are credentials generated when you register an application in the [Zoho API Console](https://api-console.zoho.com/). **Activation Process** 1. If you don't already have one, create a Zoho account [here](https://www.zoho.com/fr/signup.html). 2. Register an OAuth 2.0 application in the Zoho API Console to obtain a Client ID and Client Secret: 1. Go to the [Zoho API Console](https://api-console.zoho.com/) and click **GET STARTED** (or **ADD CLIENT** if you already have an application). 2. Choose **Server-based Applications** as the client type and click **CREATE NOW**. 3. Fill in the required details: * **Client Name**: a name of your choice (e.g. `Chift`). * **Homepage URL**: `https://chift.app` * **Authorized Redirect URI**: `https://chift.app/oauth2/redirect` 4. Click **CREATE**. 5. Open the **Client Secret** tab of your newly created application — this is where you'll find the **Client ID** and **Client Secret**. Copy both values. For more details, see Zoho's [client registration guide](https://www.zoho.com/accounts/protocol/oauth-setup.html) and the [server-based applications guide](https://www.zoho.com/accounts/protocol/oauth/web-server-applications.html). 3. In the Chift back office, open the Zoho One connector and paste the **Client ID** and **Client Secret** you just retrieved, then save. ## Test Zoho One To test the software integration, you can create your demo account [here](https://www.zoho.com/fr/signup.html). ## Connect Zoho One To activate a connection with Zoho One, users will have to go through the following steps. * French article: [Help Center - Zoho One FR](https://help.chift.app/articles/1853432319-zoho-invoice?lang=fr) * English article: [Help Center - Zoho One EN](https://help.chift.app/articles/1853432319-zoho-invoice?lang=en) ## Zoho Invoice coverage # Airwallex Source: https://docs.chift.eu/connectors/payments/airwallex }> Website: [airwallex.com](https://www.airwallex.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🌎 Worldwide ## Introduction Airwallex is a global financial platform offering payment processing, business accounts, and money transfer services for businesses. The connector here focuses on the **payment** features of Airwallex, giving you access to payments, refunds, transactions and balances data. ## Configure Airwallex **Prerequisite(s)**\ To enable Airwallex on your Chift App, you need a **Client ID** and an **API Key**. No approval is needed and the connector can be activated in one click. **Activation Process** 1. Log in to the [Airwallex web app](https://www.airwallex.com/). 2. Go to **Developer → API keys**. 3. Retrieve your **Client ID** and generate an **API Key**. 4. Select the environment (**Production** or **Sandbox**) and encode the **Client ID** and **API Key** in the connector on Chift's platform. ## Test Airwallex Airwallex provides a self-service **Sandbox** environment. You can create a demo account and generate sandbox API credentials from the [Airwallex Developer documentation](https://www.airwallex.com/docs) to test the integration before going live. ## Connect Airwallex To activate a connection with Airwallex, the user must provide the **Client ID** and **API Key** retrieved from the Airwallex web app (under **Developer → API keys**) and select the desired environment. ## Airwallex coverage # Payments API - Coverage Source: https://docs.chift.eu/connectors/payments/coverage # GoCardLess Source: https://docs.chift.eu/connectors/payments/gocardless }> Website: [GoCardLess](https://www.gocardless.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🌎 Worldwide ## Introduction GoCardless is a payment platform that enables businesses to collect recurring and one-off payments directly from customers' bank accounts. It specializes in bank debit payments, helping companies improve cash flow and reduce transaction fees. ## Configure GoCardless **Prerequisite(s)**\ To enable GoCardLess on your Chift App, if you decide to connect through an app, this app should be created on your account. **Activation Process**\ There are two connection methods available depending on how you interact with GoCardless: * **OAuth2 App Setup:** * Create an app under the **Partner** tab of the GoCardless Developer dashboard. * Collect your Client Id and Client Secret. * Set the redirect URI: [`https://chift.app/oauth2/redirect`](https://chift.app/oauth2/redirect) * **Access Token Generation:** * Go to the Developer section of your GoCardless account. * Click **Generate access tokens** to retrieve a token for direct integration. ⚠️ To **generate an Access Token**, the team member should have a ***developer access***. To grant someone this role go to ***Settings - Team - Access Level***\_ \_and give him the developer role. Then he’ll be able to generate the access token. ## Test GoCardless To test your integration, you can create a GoCardless **Sandbox environment**. * [GoCardless Sandbox Documentation](https://docs.gocardless.com/docs/getting-started) ## Connect GoCardless For detailed connection steps for both Oauth2 via app and Access token connection, check out the documentation: * [Connect GoCardLess – English](https://help.chift.app/articles/9596732096-gocardless?lang=en) * [Connecter GoCardLess – Français](https://help.chift.app/articles/9596732096-gocardless?lang=fr) ## Endpoints The following endpoints are available for GoCardless integration: 1. `GET /payments` 2. `GET /payment` 3. `GET /balances` 4. `GET /refunds` 5. `GET /transactions` ## GoCardLess coverage # Lightspeed (Payment) Source: https://docs.chift.eu/connectors/payments/lightspeed }> Website: [lightspeed.fr](https://www.lightspeedhq.fr)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction Lightspeed is a cloud-based Point of Sale (POS) and e-commerce platform for retail businesses. The connector here focuses on the **payment** features of Lightspeed, giving you access to payments and transactions data. Deliver the Lightspeed integration your customers want in no time. > ⚠️ Chift is a certified partner of Lightspeed, but to be able to use the Lightspeed connector through Chift, explicit approval of Lightspeed is needed. **Supported Version**\ Lightspeed has multiple distinct products. Only **K-Series** (modern POS, North America/UK/Europe/Oceania) is supported. **L-Series** and **G-Series** are separate products and not supported. ## Configure Lightspeed **Prerequisite(s)** * Obtain Lightspeed's approval to set up the connector via Chift. * Chift is a certified partner of Lightspeed and can use its credentials to set up the connector. * Activate the Lightspeed integration on the Chift platform (you should use the V2 Staging or V2 Production when activating the connector) **Activation Process** 1. Contact your CSM to evaluate whether the connector can be activated. 2. If ok, your CSM will be able to activate the connector on your account. The connection uses **OAuth2**. The following scopes are requested: `financial-api, items, offline_access`.\ Redirect URI: [`https://chift.app/oauth2/redirect`](https://chift.app/oauth2/redirect) ## Test Lightspeed To test the software integration, Chift can share a sandbox account (upon approval of Lightspeed). ## Connect Lightspeed To activate a connection with Lightspeed, users will have to go through the following steps. * French article: [Help Center - LightSpeed FR](https://help.chift.app/articles/3689705150-lightspeed?lang=fr) * English article: [Help Center - LightSpeed EN](https://help.chift.app/articles/3689705150-lightspeed?lang=en) ## Lightspeed (Payment) coverage # Mollie Source: https://docs.chift.eu/connectors/payments/mollie }> Website: [Mollie](https://www.mollie.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🇪🇺 Europe Documentation coming soon ## Mollie coverage # Payment connectors overview Source: https://docs.chift.eu/connectors/payments/overview | Connector | Geography | Partner Approval | Status | | ---------- | ------------ | ---------------- | ----------------- | | Mollie | 🇪🇺 Europe | ✅ Yes | 🔒 Live (Private) | | Paypal | 🌎 Worldwide | ✅ Yes | ✅ Live | | Stripe | 🌎 Worldwide | ✅ Yes | ✅ Live | | GoCardLess | 🌎 Worldwide | ✅ Yes | ✅ Live | | SumUp | 🌎 Worldwide | ✅ Yes | ✅ Live | # Paypal (Payment) Source: https://docs.chift.eu/connectors/payments/paypal }> Website: [paypal.com](https://www.paypal.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🌍 Worldwide ## Introduction Paypal is an online financial service that enables you to pay for items using a secure internet account. You simply add your bank account, credit card or debit card details and whenever you pay using PayPal, you can choose which of your cards or accounts it pays with. Deliver the Paypal integration your customers want in no time. ## Configure Paypal **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Paypal To test the software integration, you can create your demo account [here](https://developer.paypal.com/tools/sandbox/accounts). ## Connect Paypal To activate a connection with Paypal, users will have to go through the following steps. * French article: [Help Center - Paypal FR](https://help.chift.app/articles/7401984901-paypal?lang=fr) * English article: [Help Center - Paypal EN](https://help.chift.app/articles/7401984901-paypal?lang=en) ## Paypal Payments coverage # Shopify (Payment) Source: https://docs.chift.eu/connectors/payments/shopify }> Website: [shopify.com](https://www.shopify.com)\ Software type: Solution as a Software (Saas)\ Geography: 🌍 Worldwide Refer to the main article about Shopify [here](/connectors/ecommerce/shopify) The scopes to configure the application are not the same: * read\_shopify\_payments\_accounts * read\_shopify\_payments\_payouts ## Connect Shopify To activate a connection with Shopify, users will have to go through the following steps. * French article: [Help Center - Shopify FR](https://help.chift.app/articles/7848170132-shopify-payment?lang=fr) * English article: [Help Center - Shopify EN](https://help.chift.app/articles/7848170132-shopify-payment?lang=en) ## Shopify coverage # Square (Payment) Source: https://docs.chift.eu/connectors/payments/square }> Website: [square.com](https://squareup.com/fr/fr)\ Software type: Solution as a Software (Saas)\ Geography: 🌍 Worldwide ## Introduction Square streamlines the checkout process, allowing businesses to accept payments and manage their transactions within a single platform. The connector here focuses on the **payment** features of Square, giving you access to payments, payouts, refunds and transactions data. Deliver the Square integration your customers want in no time. ## Configure Square **Prerequisite(s)** * Obtain an application ID and secret from Square (Note that in order to use the integration, you must be located in a market that is supported by Square (e.g. France)) * Activate the Square integration on the Chift platform. **Activation Process** 1. Follow this [documentation](https://developer.squareup.com/docs/get-started/create-account-and-application) to set up your developer account. Link to developer portal: [here](https://developer.squareup.com) 2. To activate the connector in the platform you will need an ApplicationId and SecretID of your app. We describe below the steps to follow to set up your App's activations: * **Sign in to the Square Developer Portal**\ Go to the Square [developer portal](https://developer.squareup.com) and sign in with your Square account. * **Create Your Application**\ Navigate to the "Applications" page: [Applications](https://developer.squareup.com/apps) \ Click **Create your first application** (or **New Application**) and give your app a name. * **Open Your Application**\ After creating the app, you'll be redirected to the app settings. If not, return to the Applications page and click on the app to open it. * **Activate the Sandbox App**\ Before enabling the connector in Chift, you must activate your Sandbox app: * Go to the [Sandbox Test Accounts page](https://developer.squareup.com/console/en/sandbox-test-accounts) * Click on the name of your test account * Click the **Open in Square Dashboard** button at the top right\ This step activates your Sandbox environment in Square. * **Configure OAuth Settings**\ In your app settings, click on **OAuth** in the left-hand menu.\ Under **Redirect URLs**, add:\ [**https://chift.app/oauth2/redirect**](https://chift.app/oauth2/redirect)\ This is the **same redirect URL** for both Sandbox and Production environments.\ The following OAuth scopes are requested: `MERCHANT_PROFILE_READ, ORDERS_READ, PAYMENTS_READ, CUSTOMERS_READ, ITEMS_READ, SETTLEMENTS_READ, BANK_ACCOUNTS_READ, PAYOUTS_READ`. * **Retrieve Your Credentials**\ Still under the OAuth section, copy the following values: * **Application ID** * **Application Secret**\ Enter these credentials on the Square connector activation page in Chift's platform to complete the activation.\ Start by connecting the **Sandbox** app with Chift for testing, then repeat the exact same steps using the **Production** app credentials when you're ready to go live. ## Test Square To test the software integration: 1. With your developer account, you can have a few sandbox test accounts to test out the integration. 2. Follow this [link](https://developer.squareup.com/docs/devtools/sandbox/overview) to understand how to use the test account to generate test data & test the integration ## Connect Square To activate a connection with Square, users will have to go through the following steps. * French article: [Help Center - Square FR](https://help.chift.app/articles/7125508793-square?lang=fr) * English article: [Help Center - Square EN](https://help.chift.app/articles/7125508793-square?lang=en) ## Square (Payment) coverage # Stripe Source: https://docs.chift.eu/connectors/payments/stripe }> Website: [Stripe](https://www.stripe.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🌎 Worldwide ## Introduction Stripe is a financial infrastructure platform that helps businesses accept payments, send payouts, and manage their revenue globally. It supports a wide range of payment methods and currencies, making it easier for companies to scale and operate internationally. ## Configure Stripe **Prerequisite(s)**\ There are no prerequisites to enable Stripe in your Chift App. However, the user must be a Stripe client in order to retrieve the necessary credentials. ## Connect Stripe **Activation Process**\ There are two connection methods available depending on your use of Stripe: To activate a connection with Stripe, the user must follow the appropriate flow based on their integration type: 1. **Via an App - OAuth2 Connection is required**\ This method is used when the user is connecting through a Stripe Application.\ In this case, you must create an app in your Stripe Developer dashboard. * **Client ID** – Found under `Settings → Extensions → Onboarding Options`. * **Client Secret** – This is your **Secret key**, available on the Developer Dashboard. * You must also configure the **redirect URI** correctly during app setup. 2. **Access Token via the Stripe dashboard**\ When the integration is done via website without using an app, a direct connection using an **Access Token** (i.e., Secret key) is possible. This token is generated on the Developer interface. **Help Articles** * French: [Help Center - Stripe - FR](https://help.chift.app/articles/9383399999-stripe?lang=fr) * English: [Help Center - Stripe - EN](https://help.chift.app/articles/9383399999-stripe?lang=en) ## Test Stripe You can use **Sandbox mode** to test your integration in a safe environment. * [How to create a Stripe Sandbox account](https://stripe.com/docs/testing) * [How to create a Stripe Production account](https://dashboard.stripe.com/register) ## Endpoints The following endpoints are available for Stripe integration: 1. `GET /payments` 2. `GET /payment` 3. `GET /balances` 4. `GET /refunds` 5. `GET /transactions` # SumUp (Payment) Source: https://docs.chift.eu/connectors/payments/sumup }> Website: [SumUp](https://sumup.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🌎 Worldwide ## Introduction SumUp is a leading global financial technology company with the vision to create a world where everyone can build a thriving business. The connector here focuses on the "payment" features of SumUp. ## Configure SumUp **Prerequisite(s)**\ To enable SumUp on your Chift App, you need an oauth2 app. **Activation Process**\ You need to create a SumUp developer account to be able to activate the integration. * **OAuth2 App Setup:** * Create a developer account [here](https://www.sumup.com/en-us/developer-signup/) * Click on "Register here" (below the page). * Follow [this guide](https://developer.sumup.com/tools/authorization/register-app) to register a new application * Set the following scopes: `user.app-settings, transactions.history, user.profile_readonly` * Set the redirect URI: [`https://chift.app/oauth2/redirect`](https://chift.app/oauth2/redirect) ## Test SumUp To test your integration, you can create a SumUp **Sandbox environment**. (see above) ## Connect SumUp For detailed connection steps for both Oauth2 via app and Access token connection, check out the documentation: * [Connect SumUp – English](https://help.chift.app/articles/3502952300-sumup?lang=en) * [Connecter SumUp – Français](https://help.chift.app/articles/3502952300-sumup?lang=fr) ## SumUp coverage # Zettle (Payment) Source: https://docs.chift.eu/connectors/payments/zettle }> Website: [zettle.com](https://www.zettle.com)
Software type: Solution as a Software (Saas)
Geography: 🌍 Worldwide
## Introduction Zettle, a part of PayPal, is a point-of-sale (POS) system designed for small businesses, offering tools for managing payments, sales, and inventory. The connector here focuses on the **payment** features of Zettle, giving you access to payments, payouts, refunds, transactions and balances data. ## Configure Zettle **Prerequisite(s)** * Obtain a **Client ID** and **Client Secret** from Zettle to set up the connector. **Process** * First, you need a developer account on the Developer Portal, if you don't have it you can create it [here](https://developer.zettle.com/). * Then, you need to create an app on the developer's portal. You can follow this [user-guide](https://developer.zettle.com/docs/get-started/user-guides/create-app-credentials/create-credentials-partner-hosted-app) to do the process. Note that in order to use the integration, you must be located in a market that is supported by Zettle (e.g. France). * Create public API credentials * the redirect URL is [https://chift.app/oauth2/redirect](https://chift.app/oauth2/redirect) * the following OAuth scopes are requested: `READ:FINANCE, READ:PRODUCT, READ:PURCHASE, READ:PAYMENT` * Copy and save your client ID and secret provided * Last, you need to encode your app credentials in the connector on Chift's platform. ## Test Zettle Zettle does not provide a sandbox account. To test the integration, identify a beta tester among your clients who is willing to let you use their Zettle account to run tests. ## Connect Zettle To activate a connection with Zettle, users will have to go through the following steps. * French article: [Help Center - Zettle FR](https://help.chift.app/articles/1513559606-zettle?lang=fr) * English article: [Help Center - Zettle EN](https://help.chift.app/articles/1513559606-zettle?lang=en) ## Zettle (Payment) coverage # PMS API - Coverage Source: https://docs.chift.eu/connectors/pms/coverage # Mews Source: https://docs.chift.eu/connectors/pms/mews }> Website: [mews.com](https://www.mews.com)\ Software type: Solution as a Software (Saas)\ Geography: 🌍 Worldwide # Introduction Mews POS is a point-of-sale system integrated within the Mews hospitality platform, designed to streamline operations for hotels, hostels, and other accommodation providers. It offers features such as seamless billing, real-time inventory management, and guest service integration, all aimed at enhancing the guest experience. ## Configure Mews **Prerequisite(s)** * Obtain a client token from Mews to set up the connector. * Activate the Mews integration on the Chift platform **Activation Process** * To set up Mews and collect a client token, you must go through a partner certification process [here](https://www.mews.com/en/partnerships). ## Test Mews To test the software integration, Mews has publicly available demo accounts. You can find them [here](https://mews-systems.gitbook.io/connector-api/guidelines/environments) ## Connect Mews To activate a connection with Mews, users will have to go through the following steps. French article: [Help Center - Mews FR](https://help.chift.app/articles/3817718285-mews?lang=fr) English article: [Help Center - Mews EN](https://help.chift.app/articles/3817718285-mews?lang=en) ## Mews coverage # Noovy Source: https://docs.chift.eu/connectors/pms/noovy }> Website: [noovy.com](https://noovy.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🌍 Worldwide # Introduction Noovy is a property management system (PMS) designed for small to medium-sized hospitality businesses such as independent hotels, B\&Bs, and inns. It offers a cloud-based platform that consolidates various operational functions, including reservations, guest communications, billing, housekeeping coordination, and revenue management. The system features tools like a booking engine, channel manager, and mobile app. ## Configure Noovy **Prerequisite(s)** * Get the username and password combination of an account with API access to Noovy. * Activate the Noovy integration on the Chift platform. **Activation Process** * Encode the username and password credentials of an account with API access to Noovy. * Select the environment for which these credentials apply (Sandbox or Production). ## Connect Noovy To activate a connection with Noovy, users will have to go through the following steps. French article: [Help Center - Noovy FR](https://help.chift.app/articles/5525781095-noovy?lang=fr) English article: [Help Center - Noovy EN](https://help.chift.app/articles/5525781095-noovy?lang=en) ## Noovy coverage # Opera Source: https://docs.chift.eu/connectors/pms/opera # Introduction OPERA Cloud Property Management is the property management system from Oracle Hospitality. It helps hoteliers orchestrate hotel operations, manage guest profiles and preferences, and handle room inventory and rates, while keeping data secure. The Opera connector is built on top of the Oracle Hospitality Integration Platform (OHIP). ## Configure Opera **Prerequisite(s)** * Access to the Oracle Hospitality Integration Platform (OHIP) Developer Portal. * An OHIP application with valid credentials (Client ID, Client Secret and Application Key). * Activate the Opera integration on the Chift platform. ## Test Opera Oracle provides a shared **Partner Sandbox** that lets you test your API calls against a non-production OPERA Cloud environment. Access is consumption-based (you are billed for the calls you make) and the credentials and gateway are available from the **Environments** page of the Partner Developer Portal. \ → See Oracle's guide on how to provision and use a test environment: [Quick Start for Partners (Using the Partner Sandbox)](https://docs.oracle.com/en/industries/hospitality/integration-platform/ohipu/t_quick_start_for_partners_using_the_partner_sandbox.htm). ## Connect Opera To activate a connection with Opera, users will have to go through the following steps. \ English article: [Help Center - Opera EN](https://help.chift.app/articles/6411536484-oracle-opera?lang=en) ## Limitations * Retrieving the full list of customers (`GET customers`) is not technically supported; customers can only be retrieved individually by id. * By default all values in the `GET orders` response are consumed. Filtering orders on `closed` returns an error stating the filter is not supported. ## Opera coverage # PMS connectors overview Source: https://docs.chift.eu/connectors/pms/overview | Connector | Geography | Partner Approval | Status | | --------- | ------------ | ---------------- | ----------------- | | Mews | 🌎 Worldwide | ✅ Yes | 🚧 In development | | Noovy | 🌎 Worldwide | ✅ Yes | 🚧 In development | | Opera | 🌎 Worldwide | ✅ Yes | 🚧 In development | | Thaïs | 🇫🇷 France | ❌ No | 🚧 In development | # Thaïs Source: https://docs.chift.eu/connectors/pms/thais }> Website: [thais-pms.com](https://thais-pms.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France # Introduction Thaïs is an all-in-one property management system (PMS) for hotels and resorts, covering reservations, point of sale, billing and accounting export. The Chift connector is built on top of the Thaïs partner API and exposes reservations, invoices, payments and the data needed to feed an accounting export. ## Configure Thaïs **Activation Process** * Activate Thaïs in one click. ## Test Thaïs Thaïs makes a **demo instance** available so you can test the integration end to end before connecting a production hotel. Reach out to your Chift point of contact to obtain access to the demo instance and its credentials. ## Connect Thaïs To activate a connection with Thaïs, users will have to go through the following steps. * French article: [Help Center - Thaïs FR](https://help.chift.app/articles/8307553749-thais-pms?lang=fr) * English article: [Help Center - Thaïs EN](https://help.chift.app/articles/8307553749-thais-pms?lang=en) ## Thaïs coverage # Abill Source: https://docs.chift.eu/connectors/pos/abill }> Website: [abill](https://www.monetiqueetservices.com/121-caisse-android)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction Abill software offers a multitude of functions, whatever your trade (restaurant, bakery, retail outlet, wine merchant, bar, nightclub, grocery shop). Our cash register system is remarkably mobile for use at trade fairs, exhibitions and even markets. ## Configure Abill **Prerequisite(s)** * Obtain a partner ID * Activate the abill integration on the Chift platform. **Activation Process** Chift can encode a generic partner ID for your account. ## Test Abill To test the software integration, Chift can share a demo account upon request. ## Connect Abill To activate a connection with Abill, users will have to go through the following steps. * French article: [Help Center - Abill FR](https://help.chift.app/articles/7107051257-abill?lang=fr) * English article: [Help Center - Abill EN](https://help.chift.app/articles/7107051257-abill?lang=en) ## Technical limitations / specificities ### Closure Abill does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status from Abill's tickets. ## Abill coverage # Addictill Source: https://docs.chift.eu/connectors/pos/addictill }> Website: [addictill](https://www.addictgroup.fr/)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction Addictill, developed by Addict group, is a French point-of-sale (POS) software tailored for the retail and hospitality sectors. It offers tools for managing sales, inventory, and customer relationships, with a focus on ease of use and seamless integration. The software helps businesses streamline operations and enhance customer service. ## Configure Addictill **Prerequisite(s)** * Obtain a partner ID * Activate the Addictill integration on the Chift platform. **Activation Process**\ Chift can encode a generic partner ID for your account. ## Test Addictill To test the software integration, Chift can share a demo account upon request. ## Connect Addictill To activate a connection with Addictill, users will have to go through the following steps. * French article: [Help Center - Addictill FR](https://help.chift.app/articles/6837493199-addictill?lang=fr) * English article: [Help Center - Addictill EN](https://help.chift.app/articles/6837493199-addictill?lang=en) ## Technical limitations / specificities ### Closure Addictill does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status from Addictill's tickets. ## Addictill coverage # Agora Source: https://docs.chift.eu/connectors/pos/agora }> Website: [Agora](https://www.agorapos.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🇪🇸 Spain ## Introduction Agora is an integrated technological point-of-sale management solution designed to digitalize operations in the hospitality, retail, and food sectors, offering innovative tools adapted to a constantly evolving digital environment to help our clients grow and stand out in the market. ## Configure Agora **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Agora Chift cannot provide a sandbox environment for Agora. ## Connect Agora To activate a connection with Agora, users will have to go through the following steps. * French article: [Help Center - Agora FR](https://help.chift.app/articles/2670676902-agora?lang=fr) * Spanish article: [Help Center - Agora ES](https://help.chift.app/articles/2670676902-agora?lang=es) * English article: [Help Center - Agora EN](https://help.chift.app/articles/2670676902-agora?lang=en) ## Technical limitations / specificities ### Closure Agora does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status from Agora's order data. ## Agora coverage # Apitic Source: https://docs.chift.eu/connectors/pos/apitic }> Website: [Apitic](https://www.apitic.com//) Software type: Software as a Service (Saas) Geography: 🇫🇷 France ## Introduction Apitic is a POS application for restaurants ## Configure Apitic **Prerequisite(s)** * Activate the Apitic integration on the Chift platform by choosing either Staging or Production environment. **Activation Process** Activation is made in one click in the Chift platform. ## Test Apitic To test the software integration, Chift can share a demo account upon request. ## Connect Apitic To activate a connection with Apitic, users will have to go through the following steps. * French article: [Help Center - Apitic](https://help.chift.app/articles/5676451864-apitic?lang=fr) * English article: [Help Center - Apitic](https://help.chift.app/articles/5676451864-apitic?lang=en) ## Apitic coverage # AtillaSoft Source: https://docs.chift.eu/connectors/pos/atilla }> Website: [AtillaSoft](https://www.atillasoft.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🇧🇪 Belgium / 🇫🇷 France ## Introduction Atilla is a POS solution dedicated to resellers. ## Configure Atilla **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Atilla To test the software integration, Chift can share a demo account upon request. ## Connect Atilla To activate a connection with Atilla, users will have to go through the following steps. * French article: [Help Center - Atilla FR](https://help.chift.app/articles/6593657614-shopcaisse?lang=fr) * English article: [Help Center - Atilla EN](https://help.chift.app/articles/6593657614-shopcaisse?lang=en) ## Atilla coverage # BDP Source: https://docs.chift.eu/connectors/pos/bdp }> Website: [BDP](https://www.bdpcenter.com/)
Software type: Solution as a Software (Saas)
Geography: 🇪🇸Spain
## Introduction BDP Net is a POS software for restaurants that provides tools to manage all aspects of food service operations, helping owners streamline operations, increase efficiency, and drive growth. ## Configure BDP **Prerequisite(s)** * You must obtain an Integrator Code to be able to use the connector. This needs to be requested to BDP. **Activation Process**\ Activate the connector in one click using the Integrator Code on the connector section in your Chift account. ## Test BDP To test the software integration, you can contact BDP's support team for a sandbox environment. Chift can also share its own demo account for client tests. ## Connect BDP To activate a connection with BDP, users will have to go through the following steps. Note that this activation often involves the reseller or IT partner of the end-users. * English article: [Help Center - BDP EN](https://help.chift.app/articles/3335180601-bdp?lang=en) ## BDP coverage # Carrepos Source: https://docs.chift.eu/connectors/pos/carrepos }> Website: [https://carrepos.fr/](https://carrepos.fr/)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction Point-of-sale software designed for restaurants, fast food outlets, bakeries, cafés, snack bars, and more! ## Configure Carrepos **Prerequisite(s)** * Obtain a username / password: * Chift can provide a username / password. This will be linked to Chift's account for end-user activation (recommended) * We can connect you with Carrepos if you want to have your own card or account. * Activate the Carrepos integration on the Chift platform. **Activation Process**\ Chift can encode Chift's username/password for your account. ## Test Carrepos To test the software integration, Chift can share a demo account upon request. ## Connect Carrepos To activate a connection with Carrepos, users will have to go through the following steps. * French article: [Help Center - Carrepos FR](https://help.chift.app/articles/8963686813-carrepos?lang=fr) * English article: [Help Center - Carrepos EN](https://help.chift.app/articles/8963686813-carrepos?lang=en) ## CarrePOS coverage # Cashmag Source: https://docs.chift.eu/connectors/pos/cashmag }> Website: [cashmag.fr](https://www.cashmag.fr/)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction Cashmag is a French company specializing in point-of-sale (POS) systems for the retail and hospitality industries. Their solutions offer comprehensive tools for managing sales, inventory, and customer interactions, designed to enhance operational efficiency. Cashmag is known for its robust, user-friendly systems that integrate seamlessly with various business environments. ## Configure Cashmag **Prerequisite(s)** * Obtain a partner ID * Activate the Cashmag integration on the Chift platform. **Activation Process**\ Chift can encode a generic partner ID for your account. ## Test Cashmag To test the software integration, Chift can share a demo account upon request. ## Connect Cashmag To activate a connection with Cashmag, users will have to go through the following steps. * French article: [Help Center - Cashmag FR](https://help.chift.app/articles/8728959601-cashmag?lang=fr) * English article: [Help Center - Cashmag EN](https://help.chift.app/articles/8728959601-cashmag?lang=en) ## Technical limitations / specificities ### Closure Cashmag does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status from Cashmag's tickets. ## Cashmag coverage # Cashpad Source: https://docs.chift.eu/connectors/pos/cashpad }> Website: [cashpad.io](https://www.cashpad.io/)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction Cashpad is a French point-of-sale (POS) software solution designed for the hospitality industry, including restaurants and cafes. It offers features for managing orders, payments, and inventory, with a focus on speed and ease of use. Cashpad is known for its ability to streamline operations and improve customer service through its intuitive interface and reliable performance. ## Configure Cashpad **Prerequisite(s)**\ A username and a password are needed to activate the connector. Upon request, Chift will activate the connector for you. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Cashpad To test the software integration, Chift is unaware of a way to get a test account from Cashpad. If you need to test Cashpad specifically, we advise you to identify a beta tester in your clients that is willing to allow you to use the client’s Cashpad account for you to conduct some tests. ## Connect Cashpad To activate a connection with Cashpad, users will have to go through the following steps. * French article: [Help Center - Cashpad FR](https://help.chift.app/articles/2838752961-cashpad?lang=fr) * English article: [Help Center - Cashpad EN](https://help.chift.app/articles/2838752961-cashpad?lang=en) ## Limitations & Exceptions * You can retrieve orders on a maximum period of 3 days as the Cashpad API is too slow to retrieve more orders > This results in a 400 HTTP ERROR - "The difference in days must be smaller than 3 for Cashpad" * You can only retrieve closed orders > Requesting open orders will return an empty list ## Cashpad coverage # Cegid Retail Source: https://docs.chift.eu/connectors/pos/cegid_retail }> Website: [https://www.cegid.com/global/products/cegid-retail/](https://www.cegid.com/global/products/cegid-retail/)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction The cloud-native POS and unified commerce platform for specialty retailers to boost their profitability, drive retail activities and deliver unique omnichannel customer experience thanks to engaging in-store employees, anywhere in the world, with total confidence. ## Configure Cegid Retail **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Cegid Retail To test the software integration, Chift is unaware of a way to get a test account from Cegid Retail. If you need to test Cegid Retail specifically, we advise you to identify a beta tester in your clients for you to conduct some tests. ## Connect Cegid Retail To activate a connection with Cegid Retail, users will have to go through the following steps. * French article: [Help Center - Cegid Retail FR](https://help.chift.app/articles/9661175548-cegid-retail?lang=fr) * English article: [Help Center - Cegid Retail EN](https://help.chift.app/articles/9661175548-cegid-retail?lang=en) ## Limitations & Exceptions * You can retrieve orders on a maximum period of 1 day > This results in a 400 HTTP ERROR - "'date\_from' and 'date\_to' parameters must be same date for Cegid Retail" ## Cegid Retail coverage # Clyo Systems Source: https://docs.chift.eu/connectors/pos/clyosystems }> Website: [clyosystems.com](https://www.clyosystems.com/)\ Software type: On-premise (local agent to be installed)\ Geography: 🇫🇷 France ## Introduction Clyo Systems is a French company that provides point-of-sale (POS) software solutions specifically for the hospitality industry, including restaurants, bars, and hotels. Their software offers features for managing orders, payments, and inventory, with a focus on enhancing operational efficiency and improving customer service. Clyo Systems is recognized for its adaptable and reliable solutions that cater to the unique needs of hospitality businesses. ## Configure Clyo Systems **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Clyo Systems To test the software integration, Chift can share a demo account upon request. ## Connect Clyo Systems To activate a connection with Clyo Systems, users will have to go through the following steps. * French article: [Help Center - Clyo Systems FR](https://help.chift.app/articles/3287951540-clyo-systems?lang=fr) * English article: [Help Center - Clyo Systems EN](https://help.chift.app/articles/3287951540-clyo-systems?lang=en) ## Technical limitations / specificities ### Limitations & Exceptions * You can only retrieve closed orders > Requesting open orders will return an empty list * One consumer can be linked to one or multiple locations ### Closure Clyo Systems does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status from Clyo Systems' order data. ## Clyo Systems coverage # Connectill Source: https://docs.chift.eu/connectors/pos/connectill }> Website: [connectill.com](https://www.connectill.com/fr/)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction Connectill is a POS (point of sale) tool that allows users to manage and process transactions in real-time. With Connectill, users can accept and process payments from multiple payment methods, manage inventory and orders, and generate reports to help them analyze their business operations. It is a flexible and user-friendly tool that can help businesses of all sizes streamline their sales and payment processes. ## Configure Connectill **Prerequisite(s)** * Obtain a partner ID * Activate the Connectill integration on the Chift platform. **Activation Process**\ Chift can encode a generic partner ID for your account. ## Test Connectill To test the software integration, Chift can share a demo account upon request. ## Connect Connectill To activate a connection with Connectill, users will have to go through the following steps. * French article: [Help Center - Connectill FR](https://help.chift.app/articles/7236745945-connectill?lang=fr) * English article: [Help Center - Connectill EN](https://help.chift.app/articles/7236745945-connectill?lang=en) ## Technical limitations / specificities ### Closure Connectill does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status from Connectill's tickets. ## Connectill coverage # POS API - Coverage Source: https://docs.chift.eu/connectors/pos/coverage # Fastmag Source: https://docs.chift.eu/connectors/pos/fastmag }> Website: [https://www.fastmag.fr/](https://www.fastmag.fr/) Software type: Solution as a Software (Saas) Geography: 🇫🇷 France ## Introduction Fastmag is a comprehensive point-of-sale (POS) solution designed for the retail industry. ## Configure Fastmag **Prerequisite(s)** No prerequisite to enable the connector. **Activation Process** Activate the connector in one click on the connector section in your Chift account. ## Test Fastmag To test the software integration, Chift is unaware of a way to get a test account from Fastmag. If you need to test Fastmag specifically, we advise you to identify a beta tester in your clients for you to conduct some tests. ## Connect Fastmag To activate a connection with Fastmag, users will have to go through the following steps. * French article: [Help Center - Fastmag FR](https://help.chift.app/articles/5007804905-fastmag?lang=fr) * English article: [Help Center - Fastmag EN](https://help.chift.app/articles/5007804905-fastmag?lang=en) ## Technical limitations / specificities ### Closure Fastmag does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status from Fastmag's order data. # Fülle Source: https://docs.chift.eu/connectors/pos/fulleapps }> Website: [fülle.com](https://fulleapps.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction Fülle helps retailers to digitalise their points of sale by offering them an entire ecosystem of applications designed and developed to launch, manage and grow their business. Deliver the Fülle integration your customers want in no time. ## Configure Fülle **Prerequisite(s)** * Obtain a partner ID * Activate the Fülle integration on the Chift platform. **Activation Process**\ Chift can encode a generic partner ID for your account. ## Test Fülle To test the software integration, Chift can share a demo account upon request. ## Connect Fülle To activate a connection with Fülle, users will have to go through the following steps. * French article: [Help Center - Fülle FR](https://help.chift.app/articles/6837493199-addictill?lang=fr) * English article: [Help Center - Fülle EN](https://help.chift.app/articles/6837493199-addictill?lang=en) ## Technical limitations / specificities ### Limitations & Exceptions * You can only retrieve orders for a period of 7 days * Open orders can be retrieved and will have a NULL value on the closing\_date ### Closure Fülle does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status from Fülle's tickets. ## Fulleapps coverage # helloCash Source: https://docs.chift.eu/connectors/pos/hellocash }> Website: [helloCash.fr](https://hellocash.fr/)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction HelloCash is an application which serves as a complete retail POS system. The application runs directly in a browser without installation. Deliver the Hellocash integration your customers want in no time. ## Configure helloCash **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test helloCash To test the software integration, a sandbox can be created for free [here](https://myhellocash.com/) ## Connect helloCash To activate a connection with helloCash, users will have to go through the following steps. * French article: [Help Center - helloCash FR](https://help.chift.app/articles/6653119387-hellocash?lang=fr) * English article: [Help Center - helloCash EN](https://help.chift.app/articles/6653119387-hellocash?lang=en) ## Technical limitations / specificities ### Limitations & Exceptions * You can only retrieve closed orders > Requesting open orders will return an empty list ### Closure helloCash does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status from helloCash's order data. ## HelloCash coverage # Hiboutik Source: https://docs.chift.eu/connectors/pos/hiboutik }> Website: [hiboutik.com](https://www.hiboutik.com)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction An online point of sale management software that helps businesses manage their sales operations, inventory, customers, and finances. Deliver the Hiboutik integration your customers want in no time. ## Configure Hiboutik **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Hiboutik To test the software integration, a free account can be created on Hiboutik - [here](https://www.hiboutik.com/fr/creez_un_compte/) ## Connect Hiboutik To activate a connection with Hiboutik, users will have to go through the following steps. * French article: [Help Center - Hiboutik FR](https://help.chift.app/articles/2988353680-hiboutik?lang=fr) * English article: [Help Center - Hiboutik EN](https://help.chift.app/articles/2988353680-hiboutik?lang=en) ## Hiboutik coverage # Hosteltactil Source: https://docs.chift.eu/connectors/pos/hosteltactil }> Website: [hosteltactil.com](https://www.hosteltactil.com/) Software type: Solution as a Software (Saas) Geography: 🇪🇸 Spain ## Introduction Hosteltactil is a point-of-sale (POS) solution developed by Loomis, designed specifically for the food & beverage and hospitality industry. It helps restaurants, hotels, bars, and cafés manage their sales, table service, kitchen orders, and business operations from a single platform. Founded in 2003 and headquartered in Valencia, Spain, Hosteltactil covers the full Spanish market through an extensive partner network. ## Configure Hosteltactil **Prerequisite(s)** * Obtain a username / password (contact your CSM) * Activate the Hosteltactil integration on the Chift platform. **Activation Process** Activate the connector in one click on the connector section in your Chift account. ## Test Hosteltactil To test the software integration, Chift is unaware of a way to get a test account from Hosteltactil. If you need to test Hosteltactil specifically, we advise you to identify a beta tester in your clients for you to conduct some tests. ## Connect Hosteltactil To activate a connection with Hosteltactil, users will have to go through the following steps. * French article: [Help Center - Hosteltactil FR](https://help.chift.app/articles/hosteltactil?lang=fr) * English article: [Help Center - Hosteltactil EN](https://help.chift.app/articles/hosteltactil?lang=en) ## Technical limitations / specificities ### Closure Hosteltactil does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status from Hosteltactil's order data. ## Hosteltactil coverage # Innovorder Source: https://docs.chift.eu/connectors/pos/innovorder }> Website: [innovorder.com](https://www.innovorder.com/) Software type: Solution as a Software (Saas) Geography: 🇫🇷 France ## Introduction Innovorder is a French software designed for the hospitality industry, including restaurants, cafes, and food service providers. It offers an all-in-one platform that includes point-of-sale (POS) systems, online ordering, inventory management, and customer engagement tools. ## Configure Innovorder **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Innovorder To test the software integration, Chift can share a demo account upon request. ## Connect Innovorder To activate a connection with Innovorder, users will have to go through the following steps. * French article: [Help Center - Innovorder FR](https://help.chift.app/articles/7511293356-innovorder?lang=fr) * English article: [Help Center - Innovorder EN](https://help.chift.app/articles/7511293356-innovorder?lang=en) ## Technical limitations / specificities ### Limitations & Exceptions * You can only retrieve closed orders > Requesting open orders will return an empty list ### Closure Innovorder does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status from Innovorder's order data. ## Innovorder coverage # Jalia JDC Source: https://docs.chift.eu/connectors/pos/jalia }> Website: [jalia.com](https://www.jdc.fr/caisse-enregistreuse)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction Jalia is a cash register system for iPad, developed by JDC SA, offering over 300 features and connected accessories. The software is particularly well-suited for environments like restaurants, bars, and retail stores, providing a comprehensive and adaptable solution for managing sales, inventory, and customer interactions. ## Configure Jalia **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Jalia To test the software integration, Chift can share a demo account upon request. ## Connect Jalia To activate a connection with Jalia, users will have to go through the following steps. * French article: [Help Center - Jalia FR](https://help.chift.app/articles/6338707007-jalia-jdc?lang=fr) * English article: [Help Center - Jalia EN](https://help.chift.app/articles/6338707007-jalia-jdc?lang=en) ## Jalia - JDC coverage # L'Addition Source: https://docs.chift.eu/connectors/pos/laddition }> Website: [l'addition.com](https://www.laddition.com) Software type: Solution as a Software (Saas) Geography: 🇫🇷 France ## Introduction L'Addition is a French point-of-sale (POS) software specifically designed for the hospitality industry, including restaurants, cafes, and bars. It offers a comprehensive set of features such as order management, payment processing, table management, and real-time sales tracking. ## Configure L’addition **Prerequisite(s)** * Obtain a bearer token from l’addition * Activate the L’addition integration on the Chift platform. **Activation Process**\ Chift can encode a generic partner ID in your APP. ## Test L’addition To test the software integration, Chift can share a demo account upon request. ## Connect L’addition To activate a connection with L’addition, users will have to go through the following steps. * French article: [Help Center - L'addition FR](https://help.chift.app/articles/5669556015-l-addition?lang=fr) * English article - [Help Center - L'addition EN](https://help.chift.app/articles/5669556015-l-addition?lang=en) ## Technical limitations / specificities ### Closure L'Addition exposes its own shift documents. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift checks L'Addition's own data for the requested date instead of inferring anything: `closed` if a shift document exists for that day, `open` if it doesn't. ## L'addition coverage # LastApp Source: https://docs.chift.eu/connectors/pos/lastapp }> Website: [last.app](https://www.last.app/)
Software type: Solution as a Software (Saas)
Geography: 🇪🇸 Spain
## Introduction Last.app is a restaurant POS software that helps restaurateurs fully manage their restaurants. A technological product, integrations with other platforms being one of our pillars, allowing us to unify and automate work. ## Configure Last.APP **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Last.APP To test the software integration, you can contact LastApp’s support team here for a sandbox environment requesting some specific access to Last.app’s support team. Chift can also share its own demo account for client tests. ## Connect Last.APP To activate a connection with Last.APP, users will have to go through the following steps. * French article: [Help Center - LastAPP FR](https://help.chift.app/articles/7130963023-last-app?lang=fr) * English article: [Help Center - LastAPP EN](https://help.chift.app/articles/7130963023-last-app?lang=en) ## Technical limitations / specificities ### Limitations & Exceptions * Last.app has a quite strict rate limit (up to 100 each 10 minutes). Because of this, you can expect requests with big date ranges to fail if the amount of data to load is too big. To help limit the amount of data loaded, we encourage you to enable the post connection configuration. ### Closure Last.app does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status from Last.app's order data. ## Last.app coverage # Leo2 Source: https://docs.chift.eu/connectors/pos/leo2 }> Website: [leo2.fr](https://www.leo2.fr/)
Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France
## Introduction Leo2 is a modern, touch-screen POS (point of sale) for shops and restaurants, offering real-time transaction management, inventory and customer data. 100% customisable, every feature can be adjusted and modulated to suit the business perfectly. An ultra-intuitive interface means you can make changes to the software quickly. Complete checkout solution with over 250 integrated functions (loyalty, note sharing, click & collect, stock management, QR Code, order terminal, robot, etc.). LEO2 can handle a large production run, a rush in a large establishment. ## Configure Leo2 **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Leo2 Chift can share its own demo account for client tests. ## Connect Leo2 To activate a connection with Leo2, users will have to go through the following steps. * French article: [Help Center - Leo2 FR](https://help.chift.app/articles/8644904321-leo2?lang=fr) * English article: [Help Center - Leo2 EN](https://help.chift.app/articles/8644904321-leo2?lang=en) ## Leo2 coverage # Lightspeed (POS) Source: https://docs.chift.eu/connectors/pos/lightspeed }> Website: [lightspeed.fr](https://www.lightspeedhq.fr)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction Lightspeed is a cloud-based Point of Sale (POS) and e-commerce platform for retail businesses. It provides a range of features to manage sales, inventory, customers, and employees. The platform integrates with a variety of payment processors and also provides robust reporting and analytics tools. Deliver the Lightspeed integration your customers want in no time. > ⚠️ Chift is a certified partner of Lightspeed, but to be able to use the Lightspeed connector through Chift, explicit approval of Lightspeed is needed. **Supported Version**\ Lightspeed has multiple distinct products. Only **K-Series** (modern POS, North America/UK/Europe/Oceania) is supported. **L-Series** and **G-Series** are separate products and not supported. ## Configure Lightspeed **Prerequisite(s)** * Obtain Lightspeed's approval to set up the connector via Chift. * Chift is a certified partner of Lightspeed and can use its credentials to set up the connector. * Activate the Lightspeed integration on the Chift platform (you should use the V2 Staging or V2 Production when activating the connector). **Activation Process** 1. Contact your CSM to evaluate whether the connector can be activated. 2. If ok, your CSM will be able to activate the connector on your account. ## Test Lightspeed To test the software integration, Chift can share a sandbox account (upon approval of Lightspeed). ## Connect Lightspeed To activate a connection with Lightspeed, users will have to go through the following steps. * French article: [Help Center - Lightspeed FR](https://help.chift.app/articles/3689705150-lightspeed?lang=fr) * English article: [Help Center - Lightspeed EN](https://help.chift.app/articles/3689705150-lightspeed?lang=en) ## Limitations and exceptions * You can only retrieve closed orders. > Requesting open orders will return an empty list. ## Lightspeed (POS) coverage # MplusKASSA Source: https://docs.chift.eu/connectors/pos/mpluskassa }> Website: [mpluskassa.nl](https://www.mpluskassa.nl/)\ Software type: Solution as a Software (Saas)\ Geography: 🇳🇱 Netherlands ## Introduction MplusKASSA is the most user-friendly and flexible POS software on the Dutch market. You choose and pay for the features you need, so you never pay too much. MplusKASSA provides tailor-made solutions with all-in-one POS systems for every industry! Because MplusKASSA is sold by certified POS dealers, there is always a specialist near you who can help. ## Configure MplusKASSA **Prerequisite(s)**\ No prerequisite to enable the connector. Depending on what you are building, you can engage in an advanced partnership as well with MplusKASSA, see [here](https://developers.mpluskassa.nl/introduction/becoming-a-partner/) **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test MplusKASSA To test the software integration, Chift can share a demo account upon request. You can as well request your own test account by applying to the [partner program](https://developers.mpluskassa.nl/introduction/becoming-a-partner/) This will give you access to a sandbox environment where you will be able to play with MplusKassa. ## Connect MplusKASSA To activate a connection with MplusKASSA, users will have to go through the following steps. * Dutch article: [Help Center - MplusKASSA NL](https://help.chift.app/articles/5777271491-mpluskassa?lang=nl) * French article: [Help Center - MplusKASSA FR](https://help.chift.app/articles/5777271491-mpluskassa?lang=fr) * English article: [Help Center - MplusKASSA EN](https://help.chift.app/articles/5777271491-mpluskassa?lang=en) ## Technical limitations / specificities ### Closure MplusKASSA does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status from MplusKASSA's order data. ## MplusKASSA coverage }>/closures/\{date} Live }>/locations Live }>/orders/\{order\_id} Live }>/payment-methods Live }>/orders Live }>/sales Live }>/products Live }>/product-categories Live }>/accounting-categories Live }>/orders/\{order\_id} On request }>/payments Live }>/customers Live }>/customers On request }>/customers/\{customer\_id} On request }>/objectives On request # MyPOS Cash Register Source: https://docs.chift.eu/connectors/pos/myposcashregister }> Website: [MyPOS Cash Register](https://toporder.fr/)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction MyPOS Cash Register (previously Toporder) is a touchscreen cash register software for iPad designed for local shops and food retailers. It automates and centralizes daily management, from checkout to online sales, with features tailored to each business type (bakery, restaurant, fishmonger, etc.). ## Configure MyPOS Cash Register **Prerequisite(s)**\ Approval from MyPOS Cash Register (previously Toporder) is needed. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test MyPOS Cash Register To test the software integration, Chift can share a demo account upon request. ## Connect MyPOS Cash Register To activate a connection with MyPOS Cash Register, users will have to go through the following steps. * French article: [Help Center - MyPOS Cash Register FR](https://help.chift.app/articles/9089589194-mypos-order?lang=fr) * English article: [Help Center - MyPOS Cash Register EN](https://help.chift.app/articles/9089589194-mypos-order?lang=en) ## MyPOS Cash Register coverage # Numier Source: https://docs.chift.eu/connectors/pos/numier ## Introduction Numier is an integrated point-of-sale management solution for the hospitality and retail sectors, helping businesses digitalize and streamline their daily operations. ## Configure Numier **Prerequisite(s)** No prerequisite to enable the connector. **Activation Process** Activate the connector in one click on the connector section in your Chift account. ## Test Numier Numier provides a sandbox environment. Contact your CSM to set up a test connection with sandbox credentials. ## Connect Numier To activate a connection with Numier, users will have to go through the following steps. * Spanish article: [Help Center - Numier ES](https://help.chift.app/articles/9352019789-numier?lang=es) * French article: [Help Center - Numier FR](https://help.chift.app/articles/9352019789-numier?lang=fr) * English article: [Help Center - Numier EN](https://help.chift.app/articles/9352019789-numier?lang=en) ## Numier coverage # Odoo (POS) Source: https://docs.chift.eu/connectors/pos/odoo_pos }> Website: [odoo.com](https://www.odoo.com/fr_FR)\ Software type: Solution as a Software (Saas)\ Geography: 🌍 Worldwide\ Connector Status: Live ## Introduction Odoo POS (Odoo Point of Sale) is an all-in-one solution when it comes to handling your shops, restaurants, accounting, and sales. It is a comprehensible, user-friendly interface & is used in iPads, tablets, or laptops. Deliver the Odoo integration your customers want in no time. ## Technical limitations / specificities ### Closure Odoo POS exposes its own point-of-sale sessions. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift checks Odoo's own data for the requested date instead of inferring anything: `closed` if no session was opened, or if the session has already ended (`stop_at` is set); `open` if a session is still running (`stop_at` is not set). ## Odoo POS coverage # POS connectors overview Source: https://docs.chift.eu/connectors/pos/overview | Connector | Geography | Partner Approval | Status | | ------------------- | ------------------------------------------ | ---------------- | ----------------- | | Abill | 🇫🇷 (FR) | ✅ Yes | ✅ Live | | Addictil | 🇫🇷 (FR) | ✅ Yes | ✅ Live | | Agora | 🇪🇸 (ES) | ❌ No | ✅ Live | | Apitic | 🇫🇷 (FR) | ✅ Yes | ✅ Live | | BDP | 🇪🇸 (ES) | ✅ Yes | ✅ Live | | Cashmag | 🇫🇷 (FR) | ✅ Yes | ✅ Live | | Cashpad | 🇫🇷 (FR) | ❌ No | ✅ Live | | Clyo Systems | 🇫🇷 (FR) | ❌ No | ✅ Live | | Connectill | 🇫🇷 (FR) | ✅ Yes | ✅ Live | | Fastmag | 🇫🇷 (FR) | ❌ No | ✅ Live | | Fülleapps | 🇫🇷 (FR) | ✅ Yes | ✅ Live | | HelloCash | 🇫🇷 (FR) | ❌ No | ✅ Live | | Hiboutik | 🇫🇷 (FR) | ❌ No | ✅ Live | | Hosteltactil | 🇪🇸 (ES) | ✅ Yes | ✅ Live | | Innovorder | 🇫🇷 (FR) | ❌ No | ✅ Live | | Jalia JDC | 🇫🇷 (FR) | ❌ No | ✅ Live | | L’addition | 🇫🇷 (FR) | ✅ Yes | ✅ Live | | LastApp | 🇪🇸 (ES) | ❌ No | ✅ Live | | Lightspeed | 🇫🇷 (FR) | ✅ Yes | 🔒 Live (Private) | | MplusKASSA | 🇳🇱 (NL) | ❌ No | ✅ Live | | Numier | 🇪🇸 (ES) | ❌ No | ✅ Live | | Odoo POS | 🇧🇪 (BE), 🇨🇭 (CH), 🇫🇷 (FR), 🇱🇺 (LU) | ❌ No | ✅ Live | | PI Electronique | 🇫🇷 (FR) | ✅ Yes | ✅ Live | | Popina | 🇫🇷 (FR) | ❌ No | ✅ Live | | Planity | 🇫🇷 (FR) | ❌ No | ✅ Live | | Restomax | 🇧🇪 (BE), 🇫🇷 (FR) | ❌ No | ✅ Live | | Revo | 🇪🇸 (ES) | ❌ No | ✅ Live | | Simphony POS | 🌎 Worldwide | ❌ No | ✅ Live | | Square | 🌎 Worldwide | ✅ Yes | ✅ Live | | SumUp | 🌎 Worldwide | ✅ Yes | ✅ Live | | Synapsy | 🇫🇷 (FR) | ❌ No | ✅ Live | | Tiller | 🇪🇸 (ES), 🇫🇷 (FR) | ✅ Yes | ✅ Live | | MyPOS Cash Register | 🇫🇷 (FR) | ✅ Yes | ✅ Live | | Trivec | 🇪🇺 Europe | ✅ Yes | ✅ Live | | Zelty | 🇫🇷 (FR) | ❌ No | ✅ Live | | Zettle (Paypal) | 🌎 Worldwide | ✅ Yes | ✅ Live | # PI Electronique (Alpha Caisse) Source: https://docs.chift.eu/connectors/pos/pielectronique }> Website: [PI Electronique](https://pielectronique.com/en)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction PI Electronique (Alpha Caisse) is a French company specializing in cash register and management solutions for the hospitality industry (cafés, hotels, restaurants). ## Configure PI Electronique **Prerequisite(s)**\ Take contact with your CSM to obtain credentials to activate the connector. **Activation Process** * Obtain client ID and client secret. * Choose the environment * Activate PI Electronique integration on the Chift platform. When you activate the connector, you will be asked whether you need access to the endpoints for the catalog (products, product categories, payment methods). If you select yes, an extra question will be asked to the end-users to know if they have the Monora module ('programmation' module). If they have it, we will use this to retrieve the catalog information. Otherwise, we will use recent tickets to evaluate the catalog. Please select "No" if you don't need access to those endpoints. ## Test PI Electronique To test the software integration, Chift can share a demo account upon request. ## Connect PI Electronique To activate a connection with PI Electronique, users will have to go through the following steps. * French article: [Help Center - PI Electronique FR](https://help.chift.app/articles/3010472700-pi-electronique?lang=fr) * English article: [Help Center - PI Electronique EN](https://help.chift.app/articles/3010472700-pi-electronique?lang=en) ## Technical limitations / specificities ### Closure PI Electronique does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status from PI Electronique's order data. ## PI Electronique coverage # Planity Source: https://docs.chift.eu/connectors/pos/planity }> Website: [planity.com](https://info.planity.com)\ Software type: Solution as a Software (Saas)\ Geography: 🇪🇺Europe ## Introduction Planity POS is a point-of-sale system specifically designed for beauty and wellness businesses, such as salons and spas. It offers features like appointment scheduling, payment processing, and client management, all integrated into a single platform. Planity POS is known for its user-friendly interface and its ability to streamline daily operations, allowing professionals to manage their bookings, payments, and customer interactions efficiently. ## Configure Planity **Prerequisite(s)** ⚠️ **The Planity connector is exclusively available to accounting software clients.** This restriction is enforced by Planity directly — they only authorize accounting software providers to connect to their system via the Chift connector. As a result, access to this connector cannot be granted to other types of clients or platforms. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Planity To test the software integration, as far as Chift knows, Planity is unable to provide a sandbox account. If you need to test Planity specifically, we advise you to identify a beta tester in your clients that is willing to allow you to use the client’s Planity account for you to conduct some tests. ## Connect Planity To activate a connection with Planity, users will have to go through the following steps. * French article: [Help Center - Planity FR](https://help.chift.app/articles/6207984008-planity?lang=fr) * English article: [Help Center - Planity EN](https://help.chift.app/articles/6207984008-planity?lang=en) ## Planity coverage # Popina Source: https://docs.chift.eu/connectors/pos/popina }> Website: [popina.com](https://www.popina.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction Popina is a robust and versatile POS software solution designed to streamline sales operations, inventory management, customer management, and financial management for businesses of all sizes. Deliver the Popina integration your customers want in no time. ## Configure Popina **Prerequisite(s)**\ No prerequisite to enable the connector. However, Popina wants to be informed of Chift’s client activation of the connector with Popina. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account and notify a member of Chift (Customer or Technical teams). ## Test Popina To test the software integration, Chift can share a demo account upon request. ## Connect Popina To activate a connection with Popina, users will have to go through the following steps. * French article: [Help Center - Popina FR](https://help.chift.app/articles/6818520590-popina?lang=fr) * English article: [Help Center - Popina EN](https://help.chift.app/articles/6818520590-popina?lang=en) ## Limitations & Exceptions * You can only retrieve closed orders > Requesting open orders will return an empty list ## Popina coverage # Restomax Source: https://docs.chift.eu/connectors/pos/restomax }> Website: [restomax.be](https://restomax.be/en/)\ Software type: Solution as a Software (Saas)\ Geography:🇧🇪 Belgium / 🇫🇷 France ## Introduction Restomax is a restaurant management software that provides a comprehensive suite of tools for managing various aspects of a food service operation. It is designed to help restaurant owners and managers streamline their operations, increase efficiency, and drive growth. ## Configure Restomax **Prerequisite(s)**\ No prerequisite to enable the connector. On activation, a language can be selected. For example, when you retrieve products, you will get them in the chosen language. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Restomax To test the software integration, Chift can share a demo account upon request. ## Connect Restomax To activate a connection with Restomax, users will have to go through the following steps. * French article: [Help Center - Restomax FR](https://help.chift.app/articles/5817501305-restomax?lang=fr) * English article: [Help Center - Restomax EN](https://help.chift.app/articles/5817501305-restomax?lang=en) ## Restomax coverage # Revo Source: https://docs.chift.eu/connectors/pos/revo }> Website: [revo.works](https://revo.works/)\ Software type: Solution as a Software (Saas)\ Geography: 🇪🇸 Spain ## Introduction Revo offers an integrated turnkey management solution based on our innovative POS software. ## Configure Revo **Prerequisite(s)** * ️ Obtain a dedicated Client ID with Oauth2 application. Chift is a certified partner of Revo. We can provide you with a client\_id to set up your environment. * Activate the Revo integration on the Chift platform. **Activation Process**\ Take contact with your CSM to obtain credentials to activate the connector. Note that if you want to be on Revo's marketplace, this is an additional process. We can help you and introduce you to their team. ## Test Revo To test the software integration, Chift can share a demo account upon request. ## Connect Revo To activate a connection with Revo, users will have to go through the following steps. * Dutch article: [Help Center - Revo NL](https://help.chift.app/articles/4698714803-revo?lang=nl) * French article: [Help Center - Revo FR](https://help.chift.app/articles/4698714803-revo?lang=fr) * English article: [Help Center - Revo EN](https://help.chift.app/articles/4698714803-revo?lang=en) ### Revo coverage # Shopcaisse Source: https://docs.chift.eu/connectors/pos/shopcaisse }> Website: [Shopcaisse](https://www.shopcaisse.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🇧🇪 Belgium / 🇫🇷 France ## Introduction Shopcaisse (previously Easyshop) is a point of sale system that allows you to manage your sales and inventory. ## Configure Shopcaisse **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Shopcaisse To test the software integration, Chift can share a demo account upon request. ## Connect Shopcaisse To activate a connection with Shopcaisse, users will have to go through the following steps. * French article: [Help Center - Shopcaisse FR](https://help.chift.app/articles/8633004245-shopcaisse?lang=fr) * English article: [Help Center - Shopcaisse EN](https://help.chift.app/articles/8633004245-shopcaisse?lang=en) ## ShopCaisse coverage # Shopify (POS) Source: https://docs.chift.eu/connectors/pos/shopify }> Website: [shopify.com](https://www.shopify.com)\ Software type: Solution as a Software (Saas)\ Geography: 🌍 Worldwide Refer to the main article about Shopify [here](/connectors/ecommerce/shopify) ## Connect Shopify To activate a connection with Shopify, users will have to go through the following steps. * French article: [Help Center - Shopify FR](https://help.chift.app/articles/6990522286-shopify-pos?lang=fr) * English article: [Help Center - Shopify EN](https://help.chift.app/articles/6990522286-shopify-pos?lang=en) ## Technical limitations / specificities ### Closure Shopify POS does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status from Shopify's order data. ## Shopify coverage # Oracle Simphony Source: https://docs.chift.eu/connectors/pos/simphony }> Website: [https://www.oracle.com/food-beverage/restaurant-pos-systems/simphony-pos/](https://www.oracle.com/food-beverage/restaurant-pos-systems/simphony-pos/)\ Software type: Solution as a Software (Saas)\ Geography: 🌎 Worldwide ## Introduction Oracle Simphony is a comprehensive point-of-sale (POS) solution designed for the food and beverage industry. ## Configure Simphony **Prerequisite(s)**\ No prerequisite to enable the connector. Note that to be able to work, your clients will need to have the following versions: * Min. Reporting & Analytics 20.1 (this is an extra module) **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Simphony To test the software integration, Chift can share a demo account upon request. ## Connect Simphony To activate a connection with Simphony, users will have to go through the following steps. * French article: [Help Center - Simphony FR](https://help.chift.app/articles/9248982449-oracle-simphonypreparation?lang=fr) * English article: [Help Center - Simphony EN](https://help.chift.app/articles/9248982449-oracle-simphonypreparation?lang=en) ## Simphony coverage # Square (POS) Source: https://docs.chift.eu/connectors/pos/square }> Website: [square.com](https://squareup.com/fr/fr)\ Software type: Solution as a Software (Saas)\ Geography: 🌍 Worldwide ## Introduction Square streamlines the checkout process, allowing businesses to accept payments and manage their transactions within a single platform. It also provides real-time updates, enhancing the accuracy of inventory and financial data. Deliver the Square integration your customers want in no time. ## Configure Square **Prerequisite(s)** * Obtain an application ID and secret from Square (Note that in order to use the integration, you must be located in a market that is supported by Square (e.g. France)) * Activate the Square integration on the Chift platform. **Activation Process** 1. Follow this [documentation](https://developer.squareup.com/docs/get-started/create-account-and-application) to set up your developer account. Link to developer portal: [here](https://developer.squareup.com) 2. To activate the connector in the platform you will need an ApplicationId and SecretID of your app. We describe below the steps to follow to set up your App's activations: * **Sign in to the Square Developer Portal**\ Go to the Square [developer portal](https://developer.squareup.com) and sign in with your Square account. * **Create Your Application**\ Navigate to the "Applications" page: [Applications](https://developer.squareup.com/apps) \ Click **Create your first application** (or **New Application**) and give your app a name. * **Open Your Application**\ After creating the app, you’ll be redirected to the app settings. If not, return to the Applications page and click on the app to open it. * **Activate the Sandbox App**\ Before enabling the connector in Chift, you must activate your Sandbox app: * Go to the [Sandbox Test Accounts page](https://developer.squareup.com/console/en/sandbox-test-accounts) * Click on the name of your test account * Click the **Open in Square Dashboard** button at the top right\ This step activates your Sandbox environment in Square. * **Configure OAuth Settings**\ In your app settings, click on **OAuth** in the left-hand menu.\ Under **Redirect URLs**, add:\ [**https://chift.app/oauth2/redirect**](https://chift.app/oauth2/redirect)\ This is the **same redirect URL** for both Sandbox and Production environments. * **Retrieve Your Credentials**\ Still under the OAuth section, copy the following values: * **Application ID** * **Application Secret**\ Enter these credentials on the Square connector activation page in Chift's platform to complete the activation.\ Start by connecting the **Sandbox** app with Chift for testing, then repeat the exact same steps using the **Production** app credentials when you're ready to go live. ## Test Square To test the software integration: 1. With your developer account, you can have a few sandbox test accounts to test out the integration. 2. Follow this [link](https://developer.squareup.com/docs/devtools/sandbox/overview) to understand how to use the test account to generate test data & test the integration ## Connect Square To activate a connection with Square, users will have to go through the following steps. * French article: [Help Center - Square FR](https://help.chift.app/articles/7125508793-square?lang=fr) * English article: [Help Center - Square EN](https://help.chift.app/articles/7125508793-square?lang=en) ## Technical limitations / specificities ### Closure Square does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status by checking whether orders on the following days are fully paid. ## Square coverage # SumUp (POS) Source: https://docs.chift.eu/connectors/pos/sumuppos }> Website: [SumUp](https://sumup.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🌎 Worldwide ## Introduction SumUp is a leading global financial technology company with the vision to create a world where everyone can build a thriving business. The connector here focuses on the "payment" features of SumUp. ## Configure SumUp **Prerequisite(s)**\ To enable SumUp on your Chift App, you need an oauth2 app. **Activation Process**\ You need to create a SumUp developer account to be able to activate the integration. * **OAuth2 App Setup:** * Create a developer account [here](https://www.sumup.com/en-us/developer-signup/) * Click on "Register here" (below the page). * Follow [this guide](https://developer.sumup.com/tools/authorization/register-app) to register a new application * Set the following scopes: `user.app-settings, transactions.history, user.profile_readonly, products, accounting.read` * Set the redirect URI: [`https://chift.app/oauth2/redirect`](https://chift.app/oauth2/redirect) ## Test SumUp To test your integration, you can create a SumUp **Sandbox environment**. (see above) ## Connect SumUp For detailed connection steps for both Oauth2 via app and Access token connection, check out the documentation: * [Connect SumUp – English](https://help.chift.app/articles/3502952300-sumup?lang=en) * [Connecter SumUp – Français](https://help.chift.app/articles/3502952300-sumup?lang=fr) ## Technical limitations / specificities ### Closure SumUp does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status from SumUp's order data. ## SumUp POS coverage # Synapsy Source: https://docs.chift.eu/connectors/pos/synapsy }> Website: [synapsy.fr](https://synapsy.fr/)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction Synapsy offers a complete solution for cash collection and management dedicated to the food industry. In addition to cashiering, it can be used to manage the activity of your point of sale: invoicing, dashboards, and accounting. Deliver the Synapsy integration your customers want in no time. ## Configure Synapsy **Prerequisite(s)**\ Approval of Synapsy is necessary as an agreement needs to be made with Synapsy to be able to use their API. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Synapsy To test the software integration, Chift can share a demo account upon request. ## Connect Synapsy To activate a connection with Synapsy, users will have to go through the following steps. * French article: [Help Center - Synapsy FR](https://help.chift.app/articles/2636763184-synapsy?lang=fr) * English article: [Help Center - Synapsy EN](https://help.chift.app/articles/2636763184-synapsy?lang=en) ## Limitations & Exceptions * You can only retrieve closed orders > Requesting open orders will return an empty list ## Synapsy coverage # Tactilpad Source: https://docs.chift.eu/connectors/pos/tactilpad }> Website: [tactilpad.com](https://www.tactilpad.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction TactilPad offers 360° payment solutions with its high-performance cash register software, specially designed to meet the needs of businesses. Combining simplicity, reliability, and efficiency, our solutions help you manage your sales, inventory, and payments with complete peace of mind. ## Configure Tactilpad **Prerequisite(s)** * Obtain a partner ID * Activate the Tactilpad integration on the Chift platform. **Activation Process**\ Chift can encode a generic partner ID for your account. ## Test Tactilpad To test the software integration, Chift can share a demo account upon request. ## Connect Tactilpad To activate a connection with Tactilpad, users will have to go through the following steps. * French article: [Help Center - Tactilpad FR](https://help.chift.app/articles/7297260183-tactilpad?lang=fr) * English article: [Help Center - Tactilpad EN](https://help.chift.app/articles/7297260183-tactilpad?lang=en) ## Technical limitations / specificities ### Closure Tactilpad does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status from Tactilpad's tickets. ## Tactilpad coverage # Tiller Source: https://docs.chift.eu/connectors/pos/tiller }> Website: [tiller.com](https://www.tillersystems.com)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France, 🇪🇸 Spain # Introduction Tiller is a point-of-sale (POS) software designed specifically for the hospitality industry, including restaurants, cafes, and bars. It offers a range of features such as order management, payment processing, inventory control, and sales analytics. The company is part of the SumUp group. ## Configure Tiller **Prerequisite(s)** * Obtain a client ID and secret for a sandbox account with an Oauth2 authentication application * Obtain a provider token with an Oauth2 authentication mechanism. * Activate the Tiller integration on the Chift platform. **Activation Process**\ You will have to go through this process [here](https://www.sumup.com/en-gb/partner/) to get partner keys. ## Test Tiller To test the software integration, you will have to go through this process here to get partner keys. ## Connect Tiller To activate a connection with Tiller, users will have to go through the following steps. * French article: [Help Center - Tiller FR](https://help.chift.app/articles/7563291147-tiller?lang=fr) * English article: [Help Center - Tiller EN](https://help.chift.app/articles/7563291147-tiller?lang=en) ## Tiller coverage # Trivec Source: https://docs.chift.eu/connectors/pos/trivec }> Website: [trivec.com](https://trivecgroup.com/)\ Software type: Solution as a Software (Saas)\ Geography: 🇪🇺Europe # Introduction Trivec is a renowned European supplier of cash registers and beverage ordering systems for the hospitality industry. Their solutions facilitate the payment and management of restaurants, bars, hotels and casinos. Deliver the Trivec integration your customer wants in no time. ## Configure Trivec **Prerequisite(s)** * ️ obtain an APP ID to configure the connector. **Activation Process**\ Trivec needs to be informed that you use Chift and give its approval as for each integration they need to do a manual step to set up the API. Ask Chift to introduce you to our contact. ## Test Trivec To test the software integration, Chift can share a sandbox account with you ## Connect Trivec To activate a connection with Trivec, users will have to go through the following steps. * French article: [Help Center - Trivec FR](https://help.chift.app/articles/2673991927-trivec?lang=fr) * English article: [Help Center - Trivec EN](https://help.chift.app/articles/2673991927-trivec?lang=en) ## Trivec coverage # Zelty Source: https://docs.chift.eu/connectors/pos/zelty }> Website: [zelty.fr](https://www.zelty.fr/en)\ Software type: Solution as a Software (Saas)\ Geography: 🇫🇷 France ## Introduction Zelty is a cash register solution designed for multi-site use and built around the iPad cash register. In addition to the cash register solution, the Zelty suite includes many other features such as online reservations, KDS screens, Click n collect, and delivery management. Deliver the Zelty integration your customers want in no time. ## Configure Zelty **Prerequisite(s)**\ No prerequisite to enable the connector. **Activation Process**\ Activate the connector in one click on the connector section in your Chift account. ## Test Zelty To test the software integration, Chift can share a demo account upon request. ## Connect Zelty To activate a connection with Zelty, users will have to go through the following steps. * French article: [Help Center - Zelty FR](https://help.chift.app/articles/6804027494-zelty?lang=fr) * English article: [Help Center - Zelty EN](https://help.chift.app/articles/6804027494-zelty?lang=en) ## Technical limitations / specificities ### Closure Zelty exposes its own end-of-day closures (Z-tickets). Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift checks Zelty's own data for the requested date instead of inferring anything: `closed` if a closure (Z-ticket) exists for that day, `open` if it doesn't. ## Zelty coverage # PayPal POS (Zettle) Source: https://docs.chift.eu/connectors/pos/zettle }> Website: [zettle.com](https://www.zettle.com)\ Software type: Solution as a Software (Saas)\ Geography: 🌍 Worldwide ## Introduction Zettle, a part of PayPal, is a point-of-sale (POS) system designed for small businesses, offering tools for managing payments, sales, and inventory. It features an easy-to-use card reader, mobile app, and software that allow businesses to accept various payment methods, track sales in real time, and manage their inventory efficiently. ## Configure Zettle **Prerequisite(s)** * Obtain a **Client ID** and **Client Secret** from Zettle to set up the connector. **Process** * First, you need a developer account on the Developer Portal, if you don’t have it you can create it [here](https://developer.zettle.com/). * Then, you need to create an app on the developer’s portal. You can follow this [user-guide](https://developer.zettle.com/docs/get-started/user-guides/create-app-credentials/create-credentials-partner-hosted-app) to do the process. Note that in order to use the integration, you must be located in a market that is supported by Zettle (e.g. France) * Create public API credentials * the redirect URL is [https://chift.app/oauth2/redirect](https://chift.app/oauth2/redirect) * Copy and save your client ID and secret provided * Last, you need to encode your app credentials in the connector on Chift’s platform. ## Test Zettle Zettle does not provide a sandbox account. To test the integration, identify a beta tester among your clients who is willing to let you use their Zettle account to run tests. ## Connect Zettle To activate a connection with Zettle, users will have to go through the following steps. * French article: [Help Center - Zettle FR](https://help.chift.app/articles/1513559606-zettle?lang=fr) * English article: [Help Center - Zettle EN](https://help.chift.app/articles/1513559606-zettle?lang=en) ## Technical limitations / specificities ### Limitations and exceptions * You can only retrieve closed orders. Requesting open orders will return an empty list. ### Closure Zettle does not expose its own end-of-day closures. Based on [closure logic](/developer-guides/api-guides/pos/closure), Chift infers the status from Zettle's order data. ## Zettle coverage # Working with Accounts in Invoices Source: https://docs.chift.eu/developer-guides/api-guides/accounting/accounts-invoice This guide explains how to correctly provide account information when creating **Invoices** via the **Unified API**. ## Invoice The "create invoice" endpoint is designed specifically for creating customer (sales) and supplier (purchase) invoices in the way they are typically booked in accounting. In most cases, it results in the creation of an **invoice object** in the target accounting system. This object offers a higher level of abstraction than a generic journal entry: * You provide the **`partner_id`** at the invoice level. * The API automatically generates the receivable (customer) or payable (supplier) line in the background, using the account set on that partner in the accounting system (system default or partner-specific configuration). * The invoice lines you send only need **general accounts** (i.e., income, expenses). 💡 **Important nuance:** The `Invoice` object is only created in the target accounting system **if** that system natively supports invoices. If the accounting software does not manage invoices as standalone objects, the API abstracts the logic and posts the equivalent entries directly in the general ledger, following the same accounting rules. *(In French systems, the `partner_id` may correspond to an **auxiliary account**.)* *** ### Fields * **`partner_id`** *(required at invoice level)* * The ID of the customer or supplier in the accounting software. * Used to automatically create the receivable or payable line. * Retrieved via `GET /clients` or `GET /suppliers` (or from the response when creating a partner). * **`account_number`** *(required at line level)* * Always a **general ledger account number** (never a partner ID). * For sales invoices: typically a revenue account (e.g., `701000`). * For purchase invoices: typically an expense or purchase account (e.g., `601000`). * These accounts are often linked to categories or products in upstream systems. * **`tax_id`** *(required at line level, when applicable)* * The ID of the **tax object** (sometimes called tax code, VAT code, or tax rate) in the accounting software. * Determines the tax treatment of the line and ensures the correct tax entry is created. * Two possible scenarios, depending on the target software: 1. If the software natively supports invoices with tax handling, we pass the `tax_id` to the invoice creation endpoint, and the software generates the tax line. 2. If the software does not handle tax automatically, we retrieve the related tax account from the tax object and generate the tax line ourselves (this logic is abstracted for you). * In both cases, you only need to provide the correct `tax_id`; the Unified API ensures consistency in how tax lines are booked. # Accounts in journal entries Source: https://docs.chift.eu/developer-guides/api-guides/accounting/accounts-je This guide explains how to correctly provide account information when creating **Journal Entries** via the **Unified API**. ## Journal entry A Journal Entry (also referred to as a G/L entry) is the most **generic** way to create accounting entries.\ It can be used to book **any** kind of transaction — invoices, bank movements, adjustments, accruals, payroll entries, and more. By definition, every journal entry line must have a ledger account specified. In Chift’s API, we use two fields to indicate this: * the **type of account** (`account_type`) * the **account identifier** (`account`) *** ### Fields * **`account_type`** * `general_account` → The `account` value is a general ledger account number (retrievable via `GET /chart_of_accounts`). * `customer_account`, `supplier_account`, `employee_account` → `account` value is a third-party account. * **`account`** * If `general_account` → Simply the (general) ledger account number. * If `_account` (third-party account) → Enter the partner ID from the target software (retrieved via `GET /clients`, `GET /suppliers`, `GET /employees`, or in the response when creating a partner). *** ### How partner account works When `account_type` is `customer_account`, `supplier_account`, or `employee_account` and you provide the `account` value (partner ID in the target system), the API will automatically: 1. Retrieve the **default general account** associated with that partner. * This can be the system default (e.g., all customers post to `411000`) * Or a specific account configured directly on that partner’s record in the accounting software. 2. Use this default account to complete the posting unless you override it (see below). > *In French systems, the partner may be identified by an **auxiliary account**. In such cases, `partner_id` = auxiliary account number = ledger account.* *** ### Additional fields for account control * **`force_general_account`** *(string | null)*\ Overrides the default general account for a customer, supplier, or employee account.\ If set, this value is used instead of the one configured in the accounting system. * **`prioritise_thirdparty_account`** *(boolean | null, default: false)*\ In some accounting systems (e.g., those using auxiliary accounts), you cannot provide both a general account and a partner account, since technically both are ledger accounts. If `true`, the API will prioritize the **third-party account (partner)** in such cases. We recommend setting it to `true` when using `force_general_account`. # Analytical accounting Source: https://docs.chift.eu/developer-guides/api-guides/accounting/analytical-accounting ## Structure & integration Analytical accounting lets you allocate revenues and expenses by **custom business dimensions** like departments, projects, regions, or product lines. It exists in many accounting systems, such as **Odoo**, **Netsuite**, **Exact Online**, or **QuickBooks Online**, and is fully supported in our **unified API**. In Chift, this functionality revolves around **Analytical Plans** (dimensions) and **Analytical Accounts** (values within a dimension). *** ## What are analytical plans / accounts? An **Analytical Plan** (also called a dimension or axis) defines a business perspective for analysis. Each plan includes multiple **Analytical Accounts** (or values) that can be used to tag entries. Here’s an **example of plans / accounts scheme:** | **Analytical Plan** | **Analytical Accounts** | | ------------------- | ----------------------- | | Department | Sales, HR, Marketing | | Project | Project A, Project B | This sits in **parallel to the general ledger accounts**: while ledger accounts define the accounting nature of an entry (e.g., "Rent expense"), analytical plans define its business context (e.g., "Marketing team"). ### Fixed vs. dynamic plan models Depending on the accounting system: * Some systems use a **fixed number of analytical plans**. For instance, in **Exact Online**, exactly 2 dimensions with predefined meanings: **cost centers** and **cost units**. * Others (e.g., **Odoo**, **Netsuite**) allow **dynamic or unlimited plans**, which can be created and managed freely by the user. Our API supports both models seamlessly. *** ## Analytical plans in Chift We distinguish two modes of operation: ### Single vs. multi analytical plan modes * **Single Analytical Plan Mode**: In this mode, only **one analytical plan** is used. It is defined and configured **directly in the connector’s platform settings**. You **don’t need to use the analytical plan structure in the API**. There is no need to specify which plan to use, since only one exists by default.\ In mono mode, you can only assign **one analytical account per line** (no distribution or percentage is possible). * **Multi Analytical Plan Mode**: In this mode, **multiple analytical plans** can be used (e.g., project, department, region). You must explicitly define, for each line, the analytical plan and corresponding accounts with their distribution. The Chift API supports both configurations, and the choice depends on the connector setup. *** Analytical plans are **attached to accounting entries** (lines). This is where analytical allocations happen. They are relevant in the context of: * **Journal Entries** (`journal_entries`) * **Invoices** (`sales_invoices`, `purchase_invoices`) — specifically, the invoice lines that will generate accounting entries. > Analytical plans do not apply to purely financial data or summaries; they are tied to the accounting side of the transaction. *** ## Endpoints to manage analytical plans in Chift’s API | Method | Endpoint | Short description | | ------ | ----------------------------- | ---------------------------------------- | | GET | /analytic\_plans | Get Analytic Plans (list of plans) | | POST | /analytic\_accounts | Create analytic account (single) | | POST | /analytic\_accounts/multiple | Create analytic account (multiple plans) | | GET | /analytic\_accounts | Get analytic accounts (list) | | GET | /analytic\_accounts/ | Get analytic account (detail) | | PATCH | /analytic\_accounts/ | Update analytic account | | GET | /analytic\_accounts/multiple/ | Get analytic account (multiple plans) | | PATCH | /analytic\_accounts/multiple/ | Update analytic account (multiple plans) | | GET | /analytic\_accounts/multiple | Get analytic accounts (multiple plans) | *** ## Example of an invoice entry using multiple analytical plans in our API Let’s illustrate by an example: * The purchase invoice line for "Consulting Services" has a total amount of 1000. * This cost is analytically split: * **Projects**: 70% to `project_alpha`, 30% to `project_beta`. * **Departments**: 40% to `sales`, 35% to `marketing`, 25% to `engineering`. * This enables detailed cost tracking across both projects and departments, in parallel to the general ledger account `610`. ```jsx theme={null} { "invoice_type": "purchase", "lines": [ { "description": "Consulting Services", "amount": 1000, "account_id": "610", // General ledger expense account "analytic_distribution": [ { "analytic_plan": "project", "analytic_accounts": [ { "analytic_account": "project_alpha", "percentage": 70 }, { "analytic_account": "project_beta", "percentage": 30 } ] }, { "analytic_plan": "department", "analytic_accounts": [ { "analytic_account": "sales", "percentage": 40 }, { "analytic_account": "marketing", "percentage": 35 }, { "analytic_account": "engineering", "percentage": 25 } ] } ] } ] } ``` # Attachments Retrieval in Accounting Integrations Source: https://docs.chift.eu/developer-guides/api-guides/accounting/attachments-retrieval How to retrieve PDF or image files linked to invoices and journal entries through the Unified API. ## Understanding attachments in accounting systems Most accounting systems let users attach supporting documents (PDFs, scanned images, receipts) to their bookkeeping records — typically on **invoices** (sales / purchase entries) and on **journal entries** (G/L entries). How those files are exposed varies a lot between connectors: * Some providers return a **direct download URL** for each attachment. * Others only signal that a document exists and require an **additional API call** to fetch the file content (returned as a base64-encoded string). * A few connectors don't expose attachment information at all. With the Unified API, you don't need to know which behaviour applies to which connector. Chift normalises everything behind a single `attachments_info` object and a single retrieval endpoint. *** ## How Chift handles attachments Every invoice and every journal entry returned by the Accounting API includes an `attachments_info` object that tells you what to expect: ```json theme={null} "attachments_info": { "status": "yes | yes_to_request | no | unknown", "attachments": [] } ``` ### Status values | Status | Meaning | | ---------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `yes` | An attachment is directly accessible. Each entry in `attachments` contains a `filename` and a `url` you can download immediately. | | `yes_to_request` | An attachment exists but requires a separate API call to retrieve the file content. | | `no` | No attachment is linked to this entry. | | `unknown` | The connector does not support attachment detection for this provider. | The recommended pattern is always the same: **inspect `attachments_info.status` first**, then either download the URL directly or call the dedicated attachments endpoint. *** ## Retrieving invoice attachments Invoices returned by the following endpoints include the `attachments_info` object: * [Get invoices](/api-reference/endpoints/accounting/get-invoices-by-type-salepurchase-entries) * [Get one invoice](/api-reference/endpoints/accounting/get-one-invoice-salepurchase-entry) * [Get invoices (multiple analytic plans)](/api-reference/endpoints/accounting/get-invoices-by-type-salepurchase-entries--multiple-analytic-plans) * [Get one invoice (multiple analytic plans)](/api-reference/endpoints/accounting/get-one-invoice-salepurchase-entry--multiple-analytic-plans) ### 1. When `status` is `yes` The `attachments` array contains one or more entries with a direct URL. You can download the file straight from that URL — no additional API call needed. ```json theme={null} "attachments_info": { "status": "yes", "attachments": [ { "filename": "invoice_2024_001.pdf", "url": "https://..." } ] } ``` ### 2. When `status` is `yes_to_request` The `attachments` array may be empty. The status only signals that a file is available. To get the actual content, call the [Get attachments endpoint](/api-reference/endpoints/accounting/get-attachments) with `type=invoice`: ```http theme={null} GET /consumers/{consumer_id}/accounting/attachments?type=invoice&document_id={invoice_id} ``` The response returns a list of objects with the file as a base64-encoded string: ```json theme={null} [ { "id": "12345", "base64_string": "JVBERi0xLjQK..." } ] ``` You can then decode `base64_string` on your end to reconstruct the original PDF or image file. Connectors such as **Odoo** typically fall into the `yes_to_request` category for invoices. *** ## Retrieving journal entry attachments Journal entries follow the **exact same pattern** as invoices. The `attachments_info` object is available on: * [Get journal entries](/api-reference/endpoints/accounting/get-journal-entries) * [Get one journal entry](/api-reference/endpoints/accounting/get-one-journal-entry) * [Get journal entries (multiple analytic plans)](/api-reference/endpoints/accounting/get-journal-entries-multiple-analytic-plans) The only difference is the `type` query parameter you pass when `status` is `yes_to_request`. Use `type=entry`: ```http theme={null} GET /consumers/{consumer_id}/accounting/attachments?type=entry&document_id={journal_entry_id} ``` The response shape is identical to the invoice case — a list of objects with an `id` and a `base64_string`. *** ## End-to-end flow A typical retrieval flow looks like this, regardless of whether you're dealing with an invoice or a journal entry: 1. Fetch the document (invoice or journal entry) from the corresponding `GET` endpoint. 2. Read `attachments_info.status`. 3. Branch on the status: * `yes` → download each file from the `url` in `attachments`. * `yes_to_request` → call `GET /consumers/{consumer_id}/accounting/attachments` with the right `type` (`invoice` or `entry`) and the `document_id` of the record, then decode `base64_string`. * `no` → no file to retrieve. * `unknown` → the connector does not expose attachment metadata; skip or surface this to the end-user. # Number restrictions across accounting connectors Source: https://docs.chift.eu/developer-guides/api-guides/accounting/entries-number-restrictions Understand and handle number field limitations for accounting entries across connectors when using the Unified API. ## Number restrictions across accounting connectors When working with the Unified API, it’s important to understand that **each accounting software enforces its own rules and restrictions** regarding the `number` or `invoice_number` fields used in journal entries, financial entries, and accounting entries. These fields appear in the following endpoints: * [`invoice_number`](https://docs.chift.eu/api-reference/endpoints/accounting/create-salepurchase-entry-multiple-plans#body-invoice-number) — Sale or purchase entries * [`number`](https://docs.chift.eu/api-reference/endpoints/accounting/create-a-financial-entry#body-number) — Financial entries * [`number`](https://docs.chift.eu/api-reference/endpoints/accounting/create-journal-entry#body-number) — Journal entries *** ### Why this matters When building an integration with the Unified API, you should **always validate or normalize your numbering logic** to ensure it’s compatible across all connectors you plan to support.\ If you send an invalid `number`, the target accounting software may reject the entry. *** ### General recommendations * **Always provide a number.**\ Some connectors can generate it automatically if not provided, but for cross-connector compatibility, we recommend **always generating it yourself**. * **Numbers must be unique.**\ The `number` is **not the same** as the technical `id` or the `reference` field: * `id`: a technical unique identifier (often a UUID) * `reference`: refers to another document or object (e.g. an invoice or payment reference) * `number`: the actual accounting number visible in the accounting software *** ### Connector-specific restrictions | Connector | Restriction | | --------------------------- | ------------------------------------------------------------------------------------- | | **ACD** | Max 16 characters - REQUIRED | | **Sage BOB50** | Max 10 characters, digits only | | **DATEV** | Max 36 characters. Must contain at least one of: 0–9, A–Z, a–z, \$, &, %, \*, +, -, / | | **Dynamics 365 BC** | Max 35 characters | | **Exact Online** | Digits only - int32 | | **Horus** | Digits only - int32 | | **MyUnisoft** | Max 15 characters - REQUIRED | | **Octopus** | Digits only | | **Sage 100** | Max 17 characters | | **Sage Génération Experts** | Defined at the journal level, usually max 8 characters | | **Winbooks** | Digits only - Max 8 characters, | | **Yuki** | REQUIRED on supplier invoices | *** ### Best practice pattern To ensure compatibility across all connectors: * Use **only digits** * Keep it **under 8–10 characters** * Ensure **uniqueness per accounting period or journal** Example pattern: ```text theme={null} 20250001 20250002 20250003 ``` # Supporting Spanish Withholding Taxes (Retenciones / IRPF) in Chift Source: https://docs.chift.eu/developer-guides/api-guides/accounting/es-withholding-taxes In Spain, certain invoices are subject to **withholding taxes**, known as ***retenciones***. A withholding tax is a mechanism where the customer withholds part of the invoice amount and pays it directly to the Spanish tax authorities, instead of paying it to the supplier. As a result, the supplier receives a **net amount**, reduced by the withholding. In practice, Spanish withholding taxes mainly apply under two legal frameworks: * **IRPF (Impuesto sobre la Renta de las Personas Físicas)**\ This is the most common case and applies to **self-employed professionals and freelancers**.\ The legal name is ***Retención a cuenta del IRPF***. * **Impuesto sobre Sociedades (Corporate Income Tax)**\ In some cases, withholding taxes also apply to **companies**.\ The legal name is ***Retención a cuenta del Impuesto sobre Sociedades***. Unlike VAT, withholding taxes are **not line-level taxes**, do not increase the invoice total, and must be handled separately at the accounting and API level. This structural difference is why they require dedicated modeling when booking invoices in accounting systems. **Why this matters**\ Spanish withholding taxes are **not optional edge cases**. They are a structural part of invoicing in Spain. By introducing: * A dedicated `withholding_tax` model * Clear validation rules * Explicit tax code separation Chift ensures: * Accurate accounting * Consistent connector behavior * No hidden connector-specific hacks If you’re integrating Spanish invoices, this model is the only correct way to handle *retenciones*. ### Key accounting impact of withholding taxes Withholding tax: * is calculated at the **invoice header level**, not per line * Reduces the **total payable amount** * Does **not appear as VAT on invoice lines** * Must be reported separately using specific tax codes Because of this, modeling it as a “classic VAT tax line” leads to incorrect totals and broken accounting logic. ## How withholding taxes are handled in Chift To properly support Spanish withholding taxes, Chift has a dedicated and explicit model. ### 1. `withholding_tax` attribute on invoices A `withholding_tax` object is available **in both input and output**, located at the [**invoice header level (see here its definition)**](https://docs.chift.eu/api-reference/endpoints/accounting/create-salepurchase-entry-multiple-plans#body-withholding-tax-one-of-0). This object is mandatory when a withholding applies and contains **three required attributes**: * `tax_rate` – the withholding rate to apply (expressed as a negative value in standard usage) * `tax_code` – a withholding-specific tax code (see section 3 of this article for more details) * `tax_amount` – the calculated withholding amount (expressed as a negative value in standard usage) ### 2. Impact on invoice totals and validation Withholding taxes directly affect invoice totals. Chift enforces strict validation rules to ensure accounting accuracy. #### Invoice total validation When submitting an invoice, Chift validates that: ``` Total invoice amount = Sum of line totals + Withholding tax amount (negative) ``` * The withholding tax **reduces the total payable amount**. * If this rule is not met, the API **returns a validation error**. #### Header `tax_amount` calculation The `tax_amount` at the invoice header level is computed as: ``` Header tax_amount = Sum of line-level tax_amounts + Withholding tax amount (negative) ``` This guarantees that: * VAT reporting remains accurate * Withholding tax is clearly separated from line-level taxes * Invoice totals match Spanish accounting expectations ### 3. Dedicated VAT codes for withholding taxes To avoid ambiguity and invalid bookings, withholding tax codes are explicitly marked. **Key points:** * Specific attribute: `withholding_tax` on VAT codes (`true` or `false`) * Marks a tax code as **withholding-specific** **Chift validation rules:** * **Withholding tax VAT codes cannot be used on invoice lines** * Only withholding tax VAT codes can be used in the `withholding_tax` **attribute** * Standard VAT codes remain line-level only This separation prevents: * Mixing VAT and withholding logic * Incorrect tax reporting * Connector-specific inconsistencies ## Booking an invoice with withholding tax via Chift To correctly book a Spanish invoice with withholding tax: 1. **Use standard VAT codes on invoice lines** * Lines behave exactly like any regular VAT invoice 2. **Declare the withholding at header level** * Populate the `withholding_tax` object with: * The correct Spanish withholding tax code * Rate and calculated amount (negative) 3. Adjust `tax_amount` and `total` **at the invoice header** * Amounts must respect the validation rules described above This approach matches how Spanish accounting software and ERPs model *retenciones*, while keeping a clean and predictable Unified API. Business Central does not natively support withholding taxes as a dedicated accounting concept.\ As a result, withholding taxes are implemented using a specific VAT configuration and accounting mapping.\ The rules below describe how this is modeled in Business Central and exposed through Chift. * VAT codes with a tax rate of **0** and a calculation type set to **Full VAT** are treated as withholding tax codes.\ These VAT codes are exposed via the API with `withholding_tax = true`. \ *To add, or edit Withholding taxes you need to go to "VAT posting setup" page (use the search icon). See example here👇* Image * VAT codes flagged as withholding: * **cannot be used on standard invoice lines** * Can only be used in the `withholding_tax` attribute at invoice header level and are the **only** taxes accepted at header level. * On **customer invoices and refunds**, the **Sales VAT Account** defined on the VAT code is used as the general ledger account for the withholding tax. * On **supplier invoices and refunds**, the **Purchase VAT Account** defined on the VAT code is used instead. * For calculation purposes, Business Central relies on internal invoice lines linked to these VAT codes.\ These lines: * are used to compute the `withholding_tax` object returned by the API * are **not included** in the `lines` array of the invoice response This approach allows withholding taxes to be correctly posted in Business Central while preserving a clean and explicit withholding tax model in the Unified API.\ \ *Example of an invoice booked with Withholding tax in Business central 👇* Image # Folders Source: https://docs.chift.eu/developer-guides/api-guides/accounting/folders In our Accounting API: * A **folder** represents **one legal entity**. * Each folder contains isolated accounting data. The **multi-folder feature** allows a single connection to access and manage **multiple folders/entities** (this is typically useful for accountants). **How It Works** 1. **Regular Mode** (Single-Folder) * Enabled by default — no setup needed. * A connection is linked to **one** folder (selected during connector activation). * The `folder_id` query parameter is ignored. * All API calls operate on this single folder. 2. **Multi-Folder Mode** * Allows a consumer to manage **multiple legal entities**. * Each API request **MUST include** a `folder_id` **query parameter** to specify the target folder (except for the GET folders endpoint). * This ensures full data segregation and prevents cross-entity issues. **Activation & Configuration** **To enable multi-folder mode** in a connector (if supported): SCR 20251002 Jbhj Pn 1. **Uncheck the first checkbox** — usually labeled *“Let the user specify the folder during activation”*. **Once unchecked:** * The connection is automatically granted access to **all folders** the end-user has permission to access. * You fully control **folder switching** from your interface, rather than relying on Chift to enforce folder restrictions. 2. **The second checkbox** (if present) is **optional** and used only by certain connectors (e.g., MyUnisoft) to allow users to **select folders during activation**. * This selection is **purely UI-level**; it does **not actually restrict access** if multi-folder is enabled. * However, Chift will **automatically block API calls** to folders that were not selected. **Important Notes** * **Not all connectors support multi-folder.** Check the connector's documentation page to confirm compatibility. * **Your implementation must support both modes** (single and multi-folder) for full compatibility. * **Additional dev work is required** to integrate multi-folder support. (See implementation section below.) **Implementation Guide** * Retrieve Available Folders Use `GET /folders` to list all folders linked to the connection. Each one represents a legal entity. * Map Folder IDs Internally Create a mapping between each `folder_id` and its corresponding legal entity in your system. When a user selects “Company X,” your API calls should use its `folder_id`. * One Folder = One Legal Entity Do **not** merge data between folders or assume shared context. Each folder is fully isolated (chart of accounts, transactions, etc.). # Invoice amounts validation and corrections Source: https://docs.chift.eu/developer-guides/api-guides/accounting/invoice-amounts-validation Understand how invoice amounts are validated and how to handle rounding corrections when using the Unified API. ## Invoice amounts validation and corrections When you create invoices through the Unified API, Chift checks that your [line items](#line-level-validation) and [totals](#total-level-validation) hold together. Some checks are structural, like requiring at least one line. Others deal with rounding: Chift always stores amounts at 2 decimals, and calculating net and tax independently can leave your total a cent off from what you intended, especially when reconciling against a fixed external amount like a payment. The sections below cover what's validated, what [regroup\_lines](#4-about-regroup_lines) changes, which [calculations](#3-amounts-calculation) formula to use, and how [invoice\_corrections](#5-invoice-corrections) can fix a remaining gap. *** ### 🔍 1. Total-level validation At the invoice level, the following rules apply: * **Line count check:** An invoice must contain **at least one line**. * **Total amount check:** The total must be **greater than or equal to 0**. * **Sum consistency:**
The **sum of all line totals** must match the **invoice total**, within a precision of **4 decimals**. If there’s a mismatch: * Difference **> €0.01** → ❌ Rejected * Difference **≤ €0.01** and **no correction lines provided** → ❌ Rejected * Difference **≤ €0.01** and [correction lines](#5-invoice-corrections) **are provided** → ✅ Accepted (corrections applied automatically) *** ### 🔍 2. Line-level validation Each invoice line is validated individually: * `untaxed_amount + tax_amount` must equal `total` * `unit_price × quantity` must equal `untaxed_amount` * `untaxed_amount × tax_rate` must equal `tax_amount` *** ### 🧮 3. Amounts calculation There are 2 main use cases: 1. **Invoice-first:** You calculate the **gross amount** of an invoice from the net amount you're invoicing. The invoice is the original document, built from a net price the company already set, and its total isn't constrained by anything that happened before it: Gross amount should be: `Gross amount = Net amount x (1 + Tax rate)` > **For example:** if Net amount = 24€ and Tax rate = 21%, then Gross amount = 24€ x 1.21 = 29.04€ 2. **Payment-first:** You calculate the **net and tax amount** from the gross amount to reconcile to an invoice/payment. The money has already moved (a card charge, a bank transaction) for a fixed amount, and the invoice is created afterward purely to record and reconcile against that amount: `Net = round(Gross / (1 + Tax rate), 2)` `Tax = Gross - Net` Rounding the net to 2 decimals is part of the formula itself, not something Chift does for you. Deriving the tax as the remainder, rather than recalculating it from the tax rate, is what guarantees `Net + Tax` always equals the exact `Gross` you're reconciling against. > **For example:** if Gross amount = 3.14€ and Tax rate = 21%, then:
Net = round(3.14€ / 1.21, 2) = round(2.5950413...€, 2) = 2.60€;
Tax = 3.14€ - 2.60€ = 0.54€ In this payment-first scenario, **use** `regroup_lines = false` to avoid rounding issues that would invalidate the total amount of the entry against the payment. > **For example,** if Gross amount = 23.8€, using the same formula above, we have:
Net = 23.8€ / 1.21 = 19.669€, which we round to 19.67€ as part of the formula. Sending `net = 19.67` and `tax = 23.8 - 19.67 = 4.13` requires `regroup_lines = false`, since `0.21 × 19.67 = 4.1307` doesn't exactly match `4.13`, and only `regroup_lines = false` tolerates that small difference.
[Line-level validation step](#2-line-level-validation): `untaxed_amount × tax_rate` must equal `tax_amount`: 19,67€ x 0.21 = 4.13€ *** ### ⚙️ 4. About `regroup_lines` The `regroup_lines (boolean, default: true)` parameter defines whether lines are **grouped** before validation and posting. **When regrouping is enabled (**`regroup_lines = true`**):** * Lines are merged only when they share the exact same **account number**, **tax code**, **tax rate**, and **analytical distribution** (the `analytic_account` or `analytic_distribution` value), all four at once. If even one of these differs between two lines, they are kept separate and rounded independently, even if the others match. * Once merged, each resulting line's `untaxed_amount` and `tax_amount` are rounded to 2 decimals independently, then summed together to get that line's `total`. * The tax check requires `tax_rate × untaxed_amount` to equal `tax_amount` exactly, at 4-decimal precision. No difference is tolerated. * A new total is computed, and an [invoice correction](#4-invoice-corrections) may be introduced if needed. **When regrouping is disabled (`regroup_lines = false`):** * Each line is validated individually, without merging. * Each line's `untaxed_amount` and `tax_amount` are still rounded to 2 decimals independently, then added together. **Disabling regrouping does not skip this rounding step** — it only skips the merging of lines. * The tax check is more permissive here: instead of requiring an exact match, it accepts a tolerance of up to **€0.20** between `tax_rate × untaxed_amount` and `tax_amount` (or **€0.10** if `tax_amount` is zero or negative, e.g. on a credit note). This tolerance is what makes `regroup_lines = false` the right setting whenever your net and tax amounts are calculated to match an external total (a payment, a bank transaction) rather than to be mathematically exact against the tax rate. See [Amounts calculation](#3-amounts-calculation) above for when this applies. 👉 **Best practice:**
Amounts are always rounded to 2 decimals per line, regardless of `regroup_lines`: * Use `regroup_lines = false` when you need your line amounts to **reconcile exactly against a fixed total**; * Use `regroup_lines = true` only when you want Chift to merge lines sharing the same account/tax code/analytical distribution, and your amounts are already exact relative to the tax rate. *** ### 🧾 5. Invoice corrections When small rounding differences remain after regrouping or amount calculations, the Unified API can automatically create a **correction line** to ensure that the invoice total matches the sum of all lines exactly. You activate this feature by filling in the `invoice_correction` [object](/api-reference/endpoints/accounting/create-salepurchase-entry-multiple-plans#body-invoice-correction) in the invoice creation. When this object is provided, the Unified API uses the account numbers and tax codes you define to generate the correction line (as credit or debit) automatically on the code provided. #### Example — `invoice_correction` object ```json theme={null} "invoice_correction": { "sale_invoice_correction_tax_code": "FR_0", "purchase_invoice_correction_tax_code": "FR_0", "invoice_correction_credit_account_number": "758000", "invoice_correction_debit_account_number": "658000" } ``` # Working with Multi-Currency in Accounting Integrations Source: https://docs.chift.eu/developer-guides/api-guides/accounting/multi-currency How to handle foreign currency transactions and exchange rates when using the Unified API. ## Understanding multi-currency in accounting In accounting systems, all transactions are ultimately stored and reported in the **base currency** of the company (most commonly EUR).\ Even when multi-currency is supported, accounting software always maintains both: * the **original transaction currency**, and * the **converted base currency equivalent**. If multi-currency is **not supported**, then only the base currency is recorded. All conversions must be done **before** sending data to the accounting system. *** ## How Chift handles multi-currency With the Unified API, you don’t need to worry about whether the underlying connector supports multi-currency. **Chift automatically handles both scenarios**. The key is to always check whether your transaction currency differs from the folder’s base currency. *** ### 1. Check the base currency of the folder Each accounting folder has a `main_currency` field available in the [Get Folder endpoint](https://docs.chift.eu/api-reference/endpoints/accounting/get-folders#response-main-currency). If your transaction is in another currency (e.g. `USD` while the folder base currency is `EUR`), it is considered a **foreign currency transaction**. *** ### 2. Provide currency and exchange rate fields When posting an invoice, journal entry, or financial entry in a foreign currency: * **Set the `currency` field** in your payload (the currency of the transaction). * **Set the `currency_exchange_rate` field** to specify the exchange rate between the base and foreign currency. If the connected accounting software supports multi-currency: * The transaction is booked in the **foreign currency**, and * The accounting software handles conversion and FX gain/loss tracking automatically. If the accounting software does **not** support multi-currency: * Chift converts the transaction amount to the **base currency** using the provided `currency_exchange_rate`. * The transaction is then stored in base currency only. *** ### 3. Forcing an exchange rate (advanced) By default, when a connector supports multi-currency, Chift will use the accounting software’s **default exchange rate** for the selected date and currency pair. However, you can **override this behavior** by using the [`force_currency_exchange`](https://docs.chift.eu/api-reference/endpoints/accounting/create-journal-entry#parameter-force-currency-exchange) query parameter (available on journal entry creation). > 💡 **Recommendation:**\ > Use this parameter whenever your system is the source of truth for exchange rates (i.e., you define the rate at emission time). *** ### ✅ Best practices * Always compare your transaction currency with the folder’s `main_currency`. * Always include both `currency` and `currency_exchange_rate` — even when not strictly required.\ → This ensures **consistent behavior** across all connectors. * Use `force_currency_exchange=true` when you need full control over the applied rate. * Keep your exchange rates rounded to **6 decimal places** for accuracy and stability. *** # Handling Reverse VAT (Reverse Charge) in Accounting Source: https://docs.chift.eu/developer-guides/api-guides/accounting/reversed-vat How to manage reverse VAT invoices with Chift’s Unified API, focusing on purchase invoices. ## Reverse VAT overview The **Reverse VAT** (reverse charge) shifts **VAT reporting** from the **seller** to the **buyer**.\ Common scenarios: * **Cross-border B2B sales within the EU** * **Domestic transactions** for specific goods/services * **Imported services** from non-EU suppliers Under reverse charge: * Seller **does not charge VAT** * Buyer **self-assesses VAT**, creating both **input** and **output VAT entries** * Net VAT to pay is usually **0**, but declaration is ensured *** ## 1. Reverse VAT with `create invoice` When using the invoice endpoints, Chift handles the reverse VAT accounting automatically. ### 1.1 Purchase invoices (`supplier_invoice`) For invoices subject to reverse VAT: * **No VAT is charged** on the invoice (`tax_amount = 0`) * Assign the appropriate **reverse VAT tax code** with `reversed = true` * `tax_rate` is the applicable VAT rate (used for self-assessment) Chift’s API will **automatically generate two VAT ledger entries**: * **Output VAT** (as if the buyer had issued the invoice) * **Input VAT** (as if the buyer had paid it) These entries **offset each other**, so no VAT is paid, but both are **properly declared** in the VAT return. #### Example — purchase invoice ```json theme={null} { "invoice_type": "supplier_invoice", "invoice_number": "SUP-INV-778", "currency": "EUR", "untaxed_amount": 2000, "tax_amount": 0, "total": 2000, "reference": "Consulting services from UK supplier", "invoice_date": "2025-07-05", "due_date": "2025-08-05", "partner_id": "supp-789", "journal_id": "abcpurchjourid", "lines": [ { "line_number": 1, "quantity": 1, "untaxed_amount": 2000, "tax_rate": 21, "tax_amount": 0, "total": 2000, "account_number": "604000", "tax_code": "REV-IMPORT-SERVICES", "description": "Consulting service - Reverse VAT applicable" } ] } ``` ### 1.2 Seller side (sales invoice) For sales invoices under reverse charge, the treatment is simpler: * **Do not charge VAT** (`tax_amount = 0`, `tax_rate = 0`) * Use the appropriate **0% tax code corresponding to the reverse-charge scenario** (not necessarily marked `reversed`) * **Total = net amount**, no VAT included ### Example — sales invoice (minimal) ```json theme={null} { "invoice_type": "customer_invoice", "invoice_number": "INV-2025-001", "untaxed_amount": 1000, "tax_amount": 0, "total": 1000, "lines": [ { "line_number": 1, "quantity": 1, "untaxed_amount": 1000, "tax_rate": 0, "tax_amount": 0, "total": 1000, "tax_code": "REV-EU-B2B" } ] } ``` *** ## 2. Reverse VAT with `create journal entry` Journal entries work differently from invoices. With invoices, Chift derives accounting entries automatically. With journal entries, you are directly providing the accounting data, so reverse VAT must be explicitly described. *** ## 2.1 Purchase-side reverse VAT For purchase reverse VAT: * `tax_info` must be attached to the expense line * `tax_amount` should be calculated as:\ **amount excl. tax × VAT rate linked to the tax code** and **must not be zero** * `vat_account` should typically be the deductible VAT account returned by the **Get VAT Codes** endpoint * `reversed_vat_account` should typically be the payable VAT account returned by the **Get VAT Codes** endpoint ### Example ```json theme={null} { "reference": "Reverse VAT purchase", "journal_id": "HA", "currency": "EUR", "date": "2026-05-05", "items": [ { "account_type": "supplier_account", "account": "SUP21", "credit": 100 }, { "account_type": "general_account", "account": "601000", "debit": 100, "tax_info": { "tax_code": "445621$445200$021", "tax_amount": 21, "vat_account": "445621", "reversed_vat_account": "445200" } } ] } ``` This is different from `create invoice`. Even though the supplier invoice itself contains no charged VAT, the journal entry must explicitly provide the VAT amount so Chift can generate the reverse VAT postings. *** ## 2.2 Sales-side reverse VAT No specific reverse VAT handling is required. Create the journal entry as a normal VAT-exempt sale. *** Some accounting software does not expose VAT codes through their API — or does not use them at all. In these cases, Chift reconstructs VAT codes artificially from the VAT ledger accounts (accounts starting with `445`) in order to keep the data model consistent across all connectors. The behavior is identical for the API consumer regardless of the underlying system. There are two scenarios: * **The accounting software supports VAT codes** (and exposes them via API) → no special handling required. * **The accounting software does not have VAT codes** (or they are not accessible via API) → Chift infers the VAT code from the `445x` ledger accounts present on the transaction, using the following logic: **Sales** | VAT Type | Ledger Account(s) | | :------- | :----------------- | | Standard | `44571` or `44572` | **Purchases** | VAT Type | Ledger Account(s) | | :--------------------------------------------- | :--------------------------------------------------------------------- | | Standard | `44566` and `445664` | | Fixed assets (*Immo*) | `44562` | | Intracom – Reverse charge | `445662` or `445665`**+**`4452` | | Intracom fixed assets – Reverse charge | `445621` or `445622`**+**`4452` | | Extracom – Reverse charge | `4456698`**+**`445798`, or `445661`**+**`4451`, or `445663`**+**`4453` | | Domestic reverse charge (*Autoliquidation FR*) | `4456699`**+**`445799`, or `445666`**+**`445716` | For reverse charge scenarios (Intracom, Extracom, Autoliquidation), the detection relies on a **combination** of two ledger accounts being present together on the transaction — one representing the output VAT side and one the input VAT side. ### ✅ Summary | Role | Tax Treatment | Chift API Handling | | :-------------------------------- | :-------------- | :-------------------------------------------------------------------------------------------------------------------------------------- | | **Buyer —**`create invoice` | Self-assess VAT | `tax_amount = 0`, reversed tax code required → API generates offsetting VAT entries | | **Buyer —**`create journal entry` | Self-assess VAT | Through `tax_info`: `tax_amount = amount excl. VAT × rate`, reversed tax code required, `vat_account` + `reversed_vat_account` required | | **Seller** | VAT exempt | `tax_amount = 0`, `tax_rate = 0`, use appropriate 0% tax code | # Booking VAT on Journal Entry Lines with tax_info Source: https://docs.chift.eu/developer-guides/api-guides/accounting/vat-on-journal-entry-lines The `tax_info` object provides a **unified, connector-agnostic way** to record tax details directly on journal entry lines. Using `tax_info` eliminates the need for separate VAT lines and ensures consistent behavior across all accounting systems. It also supports **“VAT per line”** where available. “VAT per line” refers to recording VAT directly on each journal entry line instead of as a separate line. This approach aligns with the system’s expected handling of VAT and enables users to fully leverage built-in VAT reporting and declaration features. The object presented here allows you to **book VAT in a single, consistent way**. On our side, we take care of posting the VAT according to the “VAT per line” approach, or alternatively generating separate VAT lines when needed, using the information provided in the object. ## `tax_info` structure Each journal entry line can include `tax_info`: ```text theme={null} "tax_info": { "tax_code": "0", "description": null, "tax_amount": 0, "vat_account": null, "reversed_vat_account": null } ``` ### Field definitions | Field | Required | Description | | :--------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | tax\_code | Yes | Identifier of the tax rate. Used to map the correct VAT rate for the line. | | description | No | Optional text describing the tax. Useful for reports or bookkeeping notes. | | tax\_amount | Yes | The amount of VAT for this line. Always positive, **sign follows the line** (debit/credit). | | vat\_account | Yes | Ledger account for VAT. Always required for a unified approach. Some systems use only the VAT account, others only the tax code, and some require both. **If not required by target software**, the value will be ignored. | | reversed\_vat\_account | No | Optional, account to record reversed VAT when applicable | **VAT account vs tax code** For consistency across connectors, always provide both `vat_account` and `tax_code`.\ Different accounting systems rely on different mechanisms: some use only the VAT account, some only the tax code, and others require both. Supplying both ensures the most robust behavior and allows the platform to correctly handle features such as VAT per line. ### Key takeaways * **Attach tax\_info to each VAT-relevant line**\ Include the tax details directly in the line item of your journal entry payload. * **Provide both VAT account and tax code**\ Always supply both fields for cross-connector consistency. Some systems use only the VAT account, others only the tax code, and some require both. **If a system doesn’t need one, the value is ignored.** * **Handle reversed VAT if needed**\ Include `reversed_vat_account` when reversed VAT applies. * **Fallback logic**\ If a connector does not fully support `tax_info`, the legacy `tax_code` mechanism is used automatically. * **Never create separate VAT lines if using** `tax_info`\ `tax_info` ensures the tax is recorded directly on the line. *** ## Example ```json theme={null} { "items": [ { "description": "Consulting services", "account_type": "general_account", "amount": 1000, "debit_account": "7010", "credit_account": null, "tax_info": { "tax_code": "VAT20", "description": "20% VAT", "tax_amount": 200, "vat_account": "44571", "reversed_vat_account": null } } ] } ``` # Amounts, roundings and totals Source: https://docs.chift.eu/developer-guides/api-guides/ecommerce/amounts-rounding How to read e-commerce order amounts, round them consistently, and keep your totals coherent when pushing sales into an accounting system. ## Amounts, roundings and totals When you push e-commerce sales into an accounting system, the numbers have to hold together to the cent: the sum of your revenue lines, fees and VAT must match the order total, and the resulting entry must balance. This guide explains how e-commerce order amounts are exposed by the Unified API and the method we recommend to keep them correct once booked. The sections below cover the [decimal precision](#1-decimal-precision) of the amounts you receive, the [rounding rule](#2-rounding-rule) to apply, how to [handle VAT](#3-handle-vat-per-rate), how to [split a global discount](#4-splitting-a-global-discount), the e-commerce‑specific points on [fees and refunds](#5-fees-and-refunds), and the final [reconciliation](#6-reconcile-and-balance) check. This guide describes the recommended method, not a constraint enforced by the API. When you consume the e-commerce Unified API and write the result yourself into accounting, the rounding responsibility is on your side. If you post through Chift's accounting Unified API, see also [Invoice amounts validation](/developer-guides/api-guides/accounting/invoice-amounts-validation). *** ### 🔢 1. Decimal precision E-commerce amounts may be returned with **more than 2 decimals** in the API response — for example `unit_price` and `untaxed_amount` can carry up to 4 decimals, because net amounts are frequently derived from a gross total or a discount and that finer precision is preserved. Treat every monetary value from the API as raw input. Do not assume it is already at 2 decimals, and do not compare two amounts for equality without rounding both first. *** ### 🧮 2. Rounding rule Apply a single, consistent rounding rule to every amount **before** you book it: **2 decimals**, **round half up**. Examples: * an `untaxed_amount` of `19.6694` is booked as `19.67` * a net computed as `2.5950413…` is booked as `2.60` Avoid the "banker's rounding" (round half to even) that is the default in some languages and libraries, as it will drift against amounts computed the standard commercial way. *** ### 🧾 3. Handle VAT per rate **Reuse the tax amounts provided by the API rather than recomputing them.** Each line (`lines`) and each fee (`other_fees`) exposes its own `untaxed_amount`, `tax_amount`, `total`, `tax_rate` and `tax_id`. Reusing these values avoids introducing a rounding error that the source system does not have. At order level you also have `untaxed_amount`, `tax_amount` and `total`. If you must derive VAT from a gross (tax‑inclusive) amount and a rate, use the **remainder method** so that net + VAT always equals the exact gross: ```text theme={null} net = round_half_up(gross / (1 + tax_rate / 100), 2) vat = gross - net ``` Example: `gross = 3.14`, `tax_rate = 21` * `net = round(3.14 / 1.21, 2) = 2.60` * `vat = 3.14 − 2.60 = 0.54`. Always **reason per VAT rate** (and, if you map revenue to several accounts, per account × rate). Group your lines by `tax_rate` before computing net and VAT — never on a single global total, which would hide compensating rounding differences between rates. Note that `tax_rate` itself is returned rounded to 2 decimals (e.g. `21.0`). *** ### ➗ 4. Splitting a global discount The order exposes `discount_amount` at order level, while line and fee discounts appear in each element's `discounts` array. When a discount applies to the whole order rather than to a single line, spread it across the VAT rates **pro rata** of each rate's base. To avoid a missing cent, give the **remainder to the last bucket** instead of rounding it independently: ```text theme={null} for each rate except the last: share = round_half_up(global_discount * base_rate / base_total, 2) allocated += share last rate: share = global_discount - allocated ``` This guarantees that the sum of the per‑rate discount shares equals the global discount exactly. *** ### 📦 5. Fees and refunds Three e-commerce‑specific points determine whether your revenue matches the order total: * **Include fees.** `other_fees` (for example shipping) each carry their own `tax_rate` / `tax_id` and base, and are part of the order total. Book them per rate like any revenue line. The `total_without_fees` / `untaxed_amount_without_fees` fields let you separate goods from fees when needed. * **`total` excludes refunds and returns.** The `total`, `tax_amount` and `untaxed_amount` fields are the order **before** refunds and returns. The `current_total`, `current_tax_amount` and `current_untaxed_amount` fields are the amounts **after** returns and removals. Use the set that matches what you intend to book, and do not mix the two. * **Treat refunds separately.** `refunded_amount`, `detailed_refunds` and `returns` describe money given back. Book refunds as their own entry (or reverse lines) per VAT rate — never net a refund inside the original sale's VAT base. The net (HT) of a line is `untaxed_amount`, or equivalently `total − tax_amount` once both are rounded to 2 decimals. Pick one convention and apply it consistently across all lines. *** ### ✅ 6. Reconcile and balance After rounding each amount per rate to 2 decimals independently, a residual difference of **a few cents** can remain between the sum of your booked lines (net + VAT) and the order `total`. Book that residue on a **rounding account** so the entry balances (debit = credit): * a **gain** account for a positive difference (e.g. `758`); * a **loss** account for a negative difference (e.g. `658`). A residue of a **cent or two** is normal rounding and belongs on the rounding account. A difference **larger than \~1 €** is not a rounding issue — it signals inconsistent source data (or the wrong `total` vs `current_total` set). Stop and investigate rather than absorbing it. *** ## In short Round every amount to 2 decimals half‑up, reuse the VAT provided by the API, reason per rate, split global discounts with the remainder on the last bucket, include fees and keep refunds/returns separate (watch `total` vs `current_total`), and close each entry with a reconciliation that sends any residual cent to a rounding account. This is what keeps your accounting totals equal to the original e-commerce amounts. # Amounts, roundings and totals Source: https://docs.chift.eu/developer-guides/api-guides/pos/amounts-rounding How to read POS order amounts, round them consistently, and keep your totals coherent when pushing sales and payments into an accounting system. ## Amounts, roundings and totals When you push POS sales and payments into an accounting system, the numbers have to hold together to the cent: the sum of your revenue lines, VAT and payments must match the order total, and the resulting entry must balance. This guide explains how POS order amounts are exposed by the Unified API and the method we recommend to keep them correct once booked. The sections below cover the [decimal precision](#1-decimal-precision) of the amounts you receive, the [rounding rule](#2-rounding-rule) to apply, how to [handle VAT](#3-handle-vat-per-rate), how to [split a global discount](#4-splitting-a-global-discount), the POS‑specific points on [tips and payments](#5-tips-and-payments), and the final [reconciliation](#6-reconcile-and-balance) check. This guide describes the recommended method, not a constraint enforced by the API. When you consume the POS Unified API and write the result yourself into accounting, the rounding responsibility is on your side. If you post through Chift's accounting Unified API, see also [Invoice amounts validation](/developer-guides/api-guides/accounting/invoice-amounts-validation). *** ### 🔢 1. Decimal precision POS amounts may be returned with **more than 2 decimals** in the API response. For example `unit_price`, `total` or `tax_amount` can carry up to 3 decimals, because a net amount is often derived from a gross total or a quantity and that finer precision is preserved. Treat every monetary value from the API as raw input. Do not assume it is already at 2 decimals, and do not compare two amounts for equality without rounding both first. *** ### 🧮 2. Rounding rule Apply a single, consistent rounding rule to every amount **before** you book it: **2 decimals**, **round half up**. Examples: * a `unit_price` of `2.599` is booked as `2.60` * a net computed as `2.5950413…` is booked as `2.60` Avoid the "banker's rounding" (round half to even) that is the default in some languages and libraries, as it will drift against amounts computed the standard commercial way. *** ### 🧾 3. Handle VAT per rate **Reuse the tax amounts provided by the API rather than recomputing them.** Each order exposes its VAT in the `taxes` array, grouped by rate (`tax_rate`, `tax_amount`, `total`), and each line carries its own `tax_amount`. Reusing these values avoids introducing a rounding error that the source system does not have. If you must derive VAT from a gross (tax‑inclusive) amount and a rate, use the **remainder method** so that net + VAT always equals the exact gross: ```text theme={null} net = round_half_up(gross / (1 + tax_rate / 100), 2) vat = gross - net ``` Example: `gross = 3.14`, `tax_rate = 21` * `net = round(3.14 / 1.21, 2) = 2.60` * `vat = 3.14 − 2.60 = 0.54`. Always **reason per VAT rate** (and, if you map revenue to several accounts, per account × rate). Group your lines by `tax_rate` before computing net and VAT — never on a single global total, which would hide compensating rounding differences between rates. *** ### ➗ 4. Splitting a global discount When a discount applies to the whole order rather than to a single line, spread it across the VAT rates **pro rata** of each rate's base. To avoid a missing cent, give the **remainder to the last bucket** instead of rounding it independently: ```text theme={null} for each rate except the last: share = round_half_up(global_discount * base_rate / base_total, 2) allocated += share last rate: share = global_discount - allocated ``` This guarantees that the sum of the per‑rate discount shares equals the global discount exactly. *** ### 💶 5. Tips and payments Two POS‑specific points determine whether your sales side matches your payments side: * **Tips are separate from the order total.** `total_tip` (order) and `tip` (payment) are **not** included in `total`. Book them on a dedicated account — do not add them to revenue. * **Only count valid payments.** Exclude payments whose `status` is `Canceled` or `Failed` before summing. The order `total` is **tax‑inclusive (TTC)**. Your coherence check on the payment side is: ```text theme={null} sum(valid payments) + sum(valid tips) + unpaid client account (B2B) = order.total (+ total_tip) ``` The unpaid client account term only appears when an order is invoiced and settled later (B2B); for a fully paid order it is zero. *** ### ✅ 6. Reconcile and balance After rounding each amount per rate to 2 decimals independently, a residual difference of **a few cents** can remain between the sum of your booked lines (net + VAT) and the order `total`. Book that residue on a **rounding account** so the entry balances (debit = credit): * a **gain** account for a positive difference (e.g. `758`); * a **loss** account for a negative difference (e.g. `658`). A residue of a **cent or two** is normal rounding and belongs on the rounding account. A difference **larger than \~1 €** is not a rounding issue — it signals inconsistent source data. Stop and investigate rather than absorbing it. *** ## In short Round every amount to 2 decimals half‑up, reuse the VAT provided by the API, reason per rate, split global discounts with the remainder on the last bucket, keep tips out of revenue, and close each entry with a reconciliation that sends any residual cent to a rounding account. This is what keeps your accounting totals equal to the original POS amounts. # Closure Source: https://docs.chift.eu/developer-guides/api-guides/pos/closure What's the concept of a Closure in Point of Sale (POS), how Chift determines whether a POS closure is open or closed, and how this differs across connectors. ## Closure ### Why does it matter? In physical retail and hospitality, a "closure" is the everyday act of **ending a business day**: staff count the cash drawer, reconcile payments, and formally close the till or POS session. Once that happens, the sales recorded for that period are considered final: no more edits, refunds, or additions are expected. This matters for anyone building on POS data because orders can still change right up until that moment. An order created earlier in the day could still be voided, discounted, or corrected. Syncing that data too early, for example into an accounting system, **risks pulling in numbers that aren't final yet**. The `GET /pos/closures/{date}` endpoint answers a simple business question: **is this day's data safe to use yet?** `open` means the day isn't finalized and orders may still change; `closed` means the day is done and its orders can be treated as final. Not every POS software formalizes this the same way. Some have a **real closing action** performed by staff, a Z-report, an end-of-shift close, a session close, that Chift can check directly. Others never require this step at all: transactions simply accumulate, with no explicit moment when a day is marked "done." For those, Chift estimates whether a day is likely finished based on how much time has passed, since there's no native signal to rely on. The `GET /pos/closures/{date}` endpoint tells you whether the end-of-day closure for a given date has already happened. This is mainly **used before syncing orders for accounting purposes**: once a day is `closed`, its orders are considered final and safe to process. How this status is determined depends on whether the POS itself exposes a native concept of closure. ### Closure detail In addition to the `status`, the response includes a `closures` array (when available) with the detail of each closure found for the requested date, its `id`, `total`, `tax_amount`, and `payments` and `taxes` breakdown. This array is **only** **populated for connectors with native closure data and native data from the closure**. For **connectors without native closures,** `closures `**is always empty**, since there's no underlying closure record to detail. See [**Get closure info for a specific day**](https://docs.chift.eu/api-reference/endpoints/point-of-sale/get-closure-info-for-a-specific-day) for more details. *** ## Native closure connectors Some POS systems track their own end-of-day closure (a Z-ticket, a shift document, a session, etc.). For these connectors, Chift checks whether that native closure exists for the requested date and returns its status directly. **No inference is applied**. The rule is the same across all native connectors: * A date that is today or in the future always returns `open`. * Any past date returns the status of the connector's own closure record for that day. | Connector | Native closure object | | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------ | | [Zelty](/connectors/pos/zelty#closure) | End-of-day closure (Z-ticket). No Closure related additional data is returned (connector's limitation) | | [L'Addition](/connectors/pos/laddition#closure) | Shift document | | [Odoo POS](/connectors/pos/odoo_pos#closure) | Point-of-sale session | Each connector's own page details the exact native object used and any connector-specific nuance. See the linked sections above. *** ## Connectors without native closures When a POS does not expose its own closure concept, Chift infers the status using a time-based rule instead: * A date that is today or in the future returns `open`. * A date more than 7 days in the past returns `closed`. * For dates in between, Chift checks orders on the following days as an indicator that the requested day is settled. Refer to each connector's own page for the exact implementation of this rule. # Locations Source: https://docs.chift.eu/developer-guides/api-guides/pos/locations ### Locations Depending on the connector, one POS connection can be linked to one or multiple locations. Chift gives you the possibility to manage locations in your software or let Chift manage them for you. We typically recommend letting Chift manage locations for you. Different possibilities: 1. The connector can be linked to multiple locations: * Chift manages the locations. One consumer is linked to one connection which is linked to one location. Whenever you use our Unified API, you don't have to pass the location\_id query parameter, as we filter data for you. * Chift does not manage the locations. One consumer is linked to one connection which might be linked to multiple locations. Whenever you use our Unified API, you have to pass the location\_id as a query parameter, otherwise we return data for all locations. 2. The connector can only be linked to one location: In that case, you have the possibility to pass the location\_id as a query parameter but it's not mandatory. This implementation gives you the freedom to choose how to use Chift depending on your situation. How to let Chift manage locations for you?
Activate the post-connection when you enable a connector: This does not impact billing as billing is done at location level. # Authenticate with Chift API Source: https://docs.chift.eu/developer-guides/chift-authentication Every Chift API request is authenticated with a short-lived JWT bearer token. You exchange your API key credentials for a token, then send that token on every call. If you use one of the [Chift SDKs](/developer-guides/sdk), the SDK handles token acquisition and refresh for you. You only configure the three credentials below. The rest of this page is for direct HTTP integrations. ## 1. What you need An API key gives you three values, used together on every token request: | Field | Type | Description | | -------------- | ------ | -------------------------------------------------------------------------- | | `accountId` | uuid | Your Chift account identifier. Shown at the top left of the API Keys page. | | `clientId` | string | Identifies the API key. | | `clientSecret` | string | Secret for the API key. Shown **once**, at creation time. | Create and manage keys from your Chift platform ([API Keys page](https://chift.app/api-keys)). See [Create and manage API keys](/back-office/getting-started/create-api-key) for key creation, rotation, and restricting a key to specific consumers. ## 2. Base URL and environments All requests go to the same base URL: ``` https://api.chift.eu ``` There is no separate sandbox host. **The API key determines the environment**: a key created in Sandbox reaches your sandbox consumers, a key created in Production reaches your production consumers. Using a sandbox key against production data (or the reverse) fails with a `401`. Build against Sandbox first, then create a separate key in Production when going live. Sub-environments under Sandbox and Production are available on request. See [Multiple environments](/back-office/platform/multi-environment). ## 3. Get a token `POST /token` is the only Chift endpoint that does not require authentication. ```bash theme={null} curl -X POST https://api.chift.eu/token \ -H "Content-Type: application/json" \ -d '{ "clientId": "YOUR_CLIENT_ID", "clientSecret": "YOUR_CLIENT_SECRET", "accountId": "YOUR_ACCOUNT_ID" }' ``` Response: ```json theme={null} { "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "token_type": "bearer", "expires_in": 1800, "expires_on": 1754402400 } ``` * `expires_in` — token lifetime in seconds. * `expires_on` — expiry as a Unix timestamp in seconds. This is **not** a standard OAuth2 client-credentials flow: credentials are sent as a JSON body, there is no `grant_type` parameter, and no form encoding. Generic OAuth2 client libraries will not work against this endpoint. Send a plain JSON `POST` instead. See the [Get access token](/api-reference/endpoints/general/get-access-token) reference for the full schema. ## 4. Token lifetime and refresh A token is valid for **30 minutes**. There is no refresh token. Request a new one from `POST /token`. Cache the token in your application and reuse it until it expires. Do not call `POST /token` before every API request. A workable strategy: 1. Store the token together with its `expires_on`. 2. Reuse it while `now < expires_on`, ideally with a small safety margin (e.g. 60 seconds) to absorb clock skew and in-flight requests. 3. Request a new token when it is about to expire, or when a call returns `401`. The [Chift SDKs](/developer-guides/sdk) already implement this: you configure `clientId`, `clientSecret`, and `accountId` once, and the SDK fetches, caches, and renews the token internally. Don't build it twice. ## 5. Call the API Send the token in the `Authorization` header of every other request: ```bash theme={null} curl https://api.chift.eu/consumers \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" ``` The scheme is `Bearer` (JWT). Requests without a valid token are rejected. You can also try endpoints without writing code using the [API Explorer](/back-office/getting-started/api-explorer) in the platform. ## 6. Troubleshooting | Status | Code | Cause | Fix | | ------ | ---------------------------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | | `401` | `ERROR_CHIFT_AUTHENTICATION_ERROR` | Wrong `clientId` / `clientSecret` / `accountId` combination, deleted key, or a key from the other environment. | Re-check the triplet, and that the key belongs to the environment you are targeting. | | `401` | `ERROR_CHIFT_AUTHENTICATION_ERROR` | Token older than 30 minutes, or malformed `Authorization` header. | Request a new token; make sure the header is `Authorization: Bearer `. | | `422` | — | Missing or malformed field in the request body (for example an `accountId` that is not a valid uuid). | Check the response body: it lists the offending fields. | Full list of codes: [Error codes](/developer-guides/errors). Chift does not rate-limit your calls, so token renewal will not be throttled — see [Rate limits](/developer-guides/rate-limits). ## 7. Security The `clientSecret` is a server-side secret. Never embed it in a browser application, mobile app, or any client you distribute — anyone who obtains it can read and write your consumers' financial data. Perform the `POST /token` exchange from your backend and keep the resulting token server-side too. * Store credentials in a secret manager or environment variables, never in source control. * Rotate keys regularly; see [Create and manage API keys](/back-office/getting-started/create-api-key). * Restrict a key to a single consumer when an integration only needs that consumer's data. ## Next steps Create a consumer and link it to a connector. Python and Node.js SDKs, and the OpenAPI file for Postman. Try endpoints from the platform, no code required. Full reference of Chift error codes. # Activating the data layer Source: https://docs.chift.eu/developer-guides/datalayer/activation The data layer is **opt-in**. To enable the data layer on your environment: 1. **Reach out to your CSM** at Chift. 2. Together, you agree on the **sync timing** that fits your use case (how often the sync runs). The cadence directly drives how fresh the data layer data will be for your end-users. 3. Chift activates the sync. An initial run backfills historical data into the data layer store; the recurring sync then keeps it up to date at the agreed cadence. Once the initial sync completes, the data layer is ready to serve reads for that connection. The first sync can take a while on connections with a lot of historical data — plan the activation accordingly. Until it finishes, a read sent with `x-chift-datalayer: true` is rejected with `409 ERROR_DATALAYER_SYNC_PENDING` rather than returning empty data. Wait for the first `account.datalayer.refresh_executed` webhook, or read live in the meantime — see [Use it on a request](#use-it-on-a-request). ## Configuring the data layer Once the feature is enabled on your account, you manage it yourself from the **Data layer** settings page in the Chift platform. Every vertical that supports the data layer appears as its own card, and each is configured independently. The data layer settings page showing a Point of Sale card with the data layer enabled, a checklist of entities to sync (customers, taxes, product categories, accounting categories, products, payment methods, orders) and automatic activation turned on For each vertical you can control: Turn the data layer on for the vertical. The card shows how many entities are currently selected. Under **Entities**, tick the resources you want the sync to keep in the data layer store — for accounting that's folders, chart of accounts, journals, journal entries, invoices, partners, VAT codes and book years (see [Overview](/developer-guides/datalayer/overview#whats-covered-today)). Only the entities you select are synced and served through the header, so leave out anything you don't need to keep each run lean. The **automatic** enable mode (default) turns the data layer on the moment a consumer activates a matching connector, so it's ready without any per-connection action. Switch to **manual** if you'd rather enable it yourself on each connection. Set the window the first sync backfills — see [below](#choosing-how-much-history-to-load). ### Choosing how much history to load The first sync backfills historical data into the data layer store. By default it loads the **last 12 months**, but you can widen or narrow that initial window from the same settings page. The value you set is applied each time the data layer is enabled on a connection. The start-date control offers a few modes: | Mode | What the first sync loads | | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Default** | The last 12 months. | | **Today** | Only data from today onward. | | **Relative period** | A number of **months**, **years**, or **fiscal years** back. Fiscal years anchor to the connection's book years and are available for **accounting** only; the page shows a live preview of the resolved start date. | | **Full history** | Everything, with no lower date bound. | | **Custom date** | A specific date you pick. | **Full history** and long periods make the first sync pull much more data, so it takes longer to complete. Pick the shortest window that covers your use case. If you enable the data layer manually from your own backend, you can pass the same window directly to the [`enable_datalayer`](/api-reference/endpoints/datalayer/enable-the-datalayer-sync-for-a-connection) endpoint through its `from_date`, `fiscal_years_back` (accounting only) or `full_history` body options — mutually exclusive, and taking precedence over the settings-page value. ### Scoping to specific folders or locations By default the data layer syncs every top-level entity the connection exposes — all accounting folders, or all POS locations. When you enable the data layer manually from your own backend, you can narrow it to a **subset** by passing an `entity_filter` to the [`enable_datalayer`](/api-reference/endpoints/datalayer/enable-the-datalayer-sync-for-a-connection) endpoint: * `folder_ids` — for accounting connections, the folders to sync. * `location_ids` — for POS connections, the locations to sync. Only the listed entities are then synced and served through the header; the rest are left out. The ids are checked against the connection's live folders/locations at sync time, so a stale or unknown id fails the run with `ERROR_DATALAYER_ENTITY_NOT_AVAILABLE` rather than silently syncing nothing. Omit `entity_filter` to sync everything (the default). ## Use it on a request Reading from the data layer is a **per-request** choice, controlled entirely by the `x-chift-datalayer` request header. It accepts three values, so you decide per request whether an unavailable data layer should error or quietly fall back to a live read: | Header value | Data layer available | Data layer unavailable | | ------------------- | --------------------------- | ---------------------------------------------------------------------------------------------------------------------- | | *omitted* / `false` | — | Served live from the source (default behavior). | | `true` | Served from the data layer. | Rejected with an error (`400`/`409`) — for example `409 ERROR_DATALAYER_SYNC_PENDING` before the first sync completes. | | `if_available` | Served from the data layer. | Served live from the source instead of erroring. | To serve a given call from the data layer, send `x-chift-datalayer: true`: ```http theme={null} GET /accounting/journal-entries x-chift-datalayer: true ``` The endpoint, parameters and response shape are exactly the same as the regular unified API call — the response is just computed from Chift's data layer store rather than fetched live from the source. You can freely mix data-layer and live reads within the same integration and on the same connection, and reach for `if_available` when you'd rather get a live answer than an error (for example while the first sync is still running) without branching on the connection's state yourself. ### Knowing which source served a response Every response to a request that opted into the data layer (`true` or `if_available`) carries an **`x-chift-datalayer-source`** header telling you which path actually served it: * `x-chift-datalayer-source: datalayer` — served from the data layer store. * `x-chift-datalayer-source: classic` — served live from the source. This lets a caller using `if_available` tell whether a given response came fresh from the source or from the last sync. ## Reading data you just wrote Because writes go to the source and the data layer is updated only by the sync, a record you have just created or updated is not yet in the data layer until the next sync run. The pattern is simple: **just don't send the `x-chift-datalayer` header on that read**. The call then goes through the live unified API and returns the up-to-date record from the source. On subsequent reads where freshness is no longer critical, you can send the header again. ## Monitoring The sync that feeds the data layer is a standard Chift sync, so you can monitor it the same way as any other sync. See [Syncs](/syncs/overview) for the general overview and [Troubleshooting](/syncs/troubleshooting) for the most common failure modes. # Fetching data Source: https://docs.chift.eu/developer-guides/datalayer/fetching-data Keep your own copy of the data layer in sync efficiently: an initial full load, incremental updated_after reads, deletes surfaced by webhook, and a periodic full fetch as a safety net. If you mirror Chift data into your own store — a warehouse, a reporting database, an AI context store — you don't want to re-read everything on every cycle. The data layer is built for exactly this: reads are served from Chift's store rather than the live source, so you can fetch often and cheaply, and you can ask for **only what changed** since last time. The recommended strategy combines two complementary patterns: On every cycle, fetch only the records created or changed since your last fetch, using the `updated_after` parameter. On a slower cadence (for example weekly), fetch everything to realign your store — a safety net that also recovers any missed deletes. Everything below is about **reading** from the data layer. Make sure the data layer is enabled on the connection and that you send the `x-chift-datalayer: true` header on these reads — see [Activating the data layer](/developer-guides/datalayer/activation). All examples send that header. ## The sync model Run a full load once to seed your store, then keep it fresh incrementally and reconcile periodically: ```mermaid theme={null} sequenceDiagram participant C as Chift data layer participant Y as Your system participant T as Timer rect rgb(214, 245, 235) note over C,Y: Data-changed — on each refresh C->>Y: Webhook: account.datalayer.refresh_executed Y->>C: Read with updated_after = previous fetch start C-->>Y: Created / changed records end rect rgb(255, 241, 214) note over Y,T: Periodic full fetch — weekly T->>Y: Weekly trigger Y->>C: Full read (no updated_after) C-->>Y: Full data set → reconcile deletes end ``` The first time, page through each resource with no `updated_after` filter and upsert every record into your store. This seeds your dataset. On each subsequent cycle, request the same resources with `updated_after` set to the start of your previous fetch. You get back only the records that were created or changed since, and you upsert them. On a slower cadence (for example once a week), do a full fetch and reconcile as a safety net for **deletes** — the `account.datalayer.data_deleted` webhook reports removals in real time, and the full pass recovers any you might have missed. ## Incremental reads with `updated_after` Virtually every list resource the data layer serves accepts an `updated_after` query parameter — across all verticals, not just accounting. When set, the data layer returns only the records whose last-updated timestamp is **after** the value you pass — created or modified records — so each incremental cycle stays small and fast regardless of how much history exists. This works uniformly because the data layer stamps every stored row with its own last-updated timestamp: it can honor `updated_after` on any resource it serves, even ones whose source system has no native incremental filter. Since these filters are served from the data layer, they only work with the `x-chift-datalayer: true` header. Sending `updated_after` on a **live** read (no header) for a resource the source can't filter natively is rejected with a `400` error, rather than silently returning unfiltered data. ```bash cURL theme={null} # Works on any data layer list resource, in any vertical — POS orders shown here curl -G "https://api.chift.eu/consumers/{consumerId}/pos/orders" \ -H "Authorization: Bearer " \ -H "x-chift-datalayer: true" \ --data-urlencode "updated_after=2024-01-31T15:00:00Z" ``` A few rules to get right: * **Always pass UTC.** Use an ISO 8601 timestamp in UTC (for example `2024-01-31T15:00:00Z`). UTC is the only format supported consistently across connectors. * **Use the start of your previous fetch, not its end.** Record when each cycle *began*, and pass that value as `updated_after` next time. This overlaps the window slightly and avoids missing records that changed while the previous fetch was running. * **Reads still paginate.** A large incremental window can still span several pages — keep following pagination until the page is empty. See [Pagination limits](/developer-guides/unified-api/pagination). * **Upsert, don't append.** A record can come back because it was updated, so key your writes on the record id and upsert. Small, rarely-changing catalog resources — chart of accounts, journals, tax codes, product catalogs, and the like — can just be re-fetched in full each cycle: incremental reads are optional there, and a full pass is cheap and just as correct. ## React to refresh webhooks The data layer is only as fresh as its last sync, so there's no point fetching more often than it refreshes. Instead of polling on a timer, subscribe to the datalayer webhooks and react when a refresh happens: * `account.datalayer.refresh_initiated` — a refresh started for a consumer. * `account.datalayer.refresh_executed` — the refresh finished for that consumer, with a `status` of `success` or `error`. * `account.datalayer.data_changed` — which resources changed in that refresh. * `account.datalayer.data_deleted` — which records were **removed** from the data layer in that refresh. When you receive `account.datalayer.refresh_executed` (or `data_changed`), trigger an incremental read with `updated_after` set to the start of your previous fetch and upsert the results — this keeps your store aligned without guessing the cadence. When you receive `account.datalayer.data_deleted`, delete the listed records from your store (see [Handling deletes](#handling-deletes)). See [Webhooks](/developer-guides/webhooks) for the payload format and how to verify the signature. ## Handling deletes `updated_after` returns created and changed records — it can **never** return a record that was deleted in the source, because a deleted record simply stops appearing in reads. Incremental reads alone will therefore let deleted records linger in your store. The data layer surfaces deletes in two ways: * **The `account.datalayer.data_deleted` webhook (recommended).** Each refresh emits this event with the records it removed, so you can drop exactly those from your store as soon as the refresh completes — no extra reads, and deletes stay as fresh as your incremental updates. * **A periodic full fetch, as a safety net.** On a slower cadence (weekly is a good default), fetch each resource in full and reconcile against your store: any record you hold that is absent from the full result set has been removed at the source and should be deleted (or soft-deleted) on your side. This also recovers any delete notification you might have missed. Don't reconcile deletes from an incremental result set. A response filtered by `updated_after` is only a partial slice of the data — treating absence from it as a delete would wipe every record that simply didn't change. Only reconcile deletes against a **full**, unfiltered fetch. ## Putting it together A typical loop: Full load once. Record the timestamp at which the load started. On each `account.datalayer.refresh_executed` webhook (or your chosen cadence), read each incremental resource with `updated_after` = the start of your previous fetch, upsert the results, then store the new fetch-start timestamp. Apply any `account.datalayer.data_deleted` events to drop removed records. Once a week, full-fetch every resource and reconcile against your store as a safety net — this recovers any delete you might have missed. This keeps day-to-day traffic tiny while guaranteeing your store fully realigns with the source on every full pass. ## Related What the data layer is and how it stays fresh. Enable it on a connection and use the header. # Data layer overview Source: https://docs.chift.eu/developer-guides/datalayer/overview The **data layer** is an alternative way to read unified data through Chift. Instead of querying the source accounting system live on every request — the way the unified API normally works — your reads are served from a copy of the data that Chift maintains on its own infrastructure and keeps in sync with the source in the background. This is the perfect solution for reporting use cases or for AI agents to compute a lot of data and context. The API surface is exactly the same. You keep calling the same unified endpoints with the same parameters and get the same response shape. What changes is *where* the answer comes from, and you choose that **per request** by setting a header. Data layer architecture: the same unified endpoint serves live reads from the source by default, or reads from the read-only data layer when you send the x-chift-datalayer header ## How it differs from the unified API By default, every call you make to a Chift unified endpoint is **transactional**: Chift forwards the request to the third-party system in real time, normalizes the response, and returns it. When you send the request with the `x-chift-datalayer: true` header, the same call is served from Chift's data layer store, which a background sync keeps up to date. The sync contacts the source system, not the request itself. | | Unified API (default) | Data layer (`x-chift-datalayer: true`) | | --------------------------------------- | ------------------------------------- | ------------------------------------------------------------- | | Where reads come from | Source unified system, live | Chift's data layer store | | Freshness | Always the latest state of the source | As fresh as the last sync | | Response time | Depends on the source system | Fast and consistent | | Heavy queries / pagination over history | Limited by the source | Designed for it | | Writes (create / update) | Go straight to the source | Still go straight to the source — the data layer is read-only | | API surface used | Same unified endpoints | Same unified endpoints | | Opt-in level | Default | Per request, via header | Because the choice is made per request, the same connection can serve both live and data layer reads side by side. If you need a record back the instant you've written it, simply omit the header on that read; if you're paginating through history, send it. ## When to use the data layer The data layer is the right choice when you want: * **Fast, consistent read latency** that doesn't depend on the load or availability of the source accounting system. * **To page through large amounts of historical data** (entries, invoices, partners) without hitting the source on every page. * **To run heavier read patterns** — filtering, date ranges, multiple folders — at a higher rate than the source would comfortably allow. * **To decouple your read traffic** from the source system's rate limits and downtime. The default unified API remains the right choice when freshness matters above all (status checks, write-then-read flows, real-time UIs), when traffic is modest, or when the data you need isn't yet covered by the data layer. ## What's covered today The data layer covers the **Accounting**, **Point of Sale** and **Banking** unified APIs. Within each, the standard resources are available: **Accounting** * Folders * Chart of accounts (ledger accounts) * Journals * Journal entries (and lines) * Invoices (and lines, payments) * Partners (clients and suppliers) * VAT codes * Book years * Analytic plans **Point of Sale** * Locations * Customers * Products, product categories and accounting categories * Taxes * Payment methods * Orders (and lines, payments) **Banking** * Financial institutions * Financial accounts * Transactions You pick which of these resources actually sync per vertical on the settings page — see [Activating the data layer](/developer-guides/datalayer/activation). ## How freshness works The data layer is populated by a **sync** attached to the connection. The sync runs on a defined cadence and writes the records it pulls into the data layer store. How much it pulls on each run depends on the kind of entity: * **Time-series entities — accounting journal entries and invoices, POS orders, banking transactions — are synced incrementally.** Each run pulls only the records created or changed in the source since the previous run, plus a configurable **lookback window** that re-pulls recent history to catch late edits and backdated changes. This keeps each run fast even as history grows. * **Reference data — folders, locations, chart of accounts, journals, partners, product catalogs, VAT codes, book years, financial institutions and accounts — is fully re-synced.** These sets are small and change rarely, so every run refreshes them in full rather than tracking deltas. A few things to know: * **Reads with the header always reflect the last successful sync.** If the source has changed since the last sync ran, those changes are not yet visible through the data layer. * **Reads without the header are always live**, so a write-then-read flow that needs the freshest state simply skips the header on the read. * **The sync cadence is configurable per connection** and is agreed with your CSM/SE when the feature is enabled — see [Activating the data layer](/developer-guides/datalayer/activation). ### Refresh webhooks You can subscribe to webhooks to know exactly when a data layer refresh runs, so you can react when fresh data becomes available (for example, kick off downstream reporting jobs once a refresh completes). Two events are emitted, **once per consumer**, around each refresh: * `account.datalayer.refresh_initiated` — sent when a refresh starts for a consumer. * `account.datalayer.refresh_executed` — sent when the refresh finishes for that consumer, with a `status` of `success` or `error` indicating how it ended. Both carry the standard webhook attributes (`accountid`, `consumerid`, `created`, ...) plus the `connectionid` of the connection being refreshed, the `api` the sync refreshes (e.g. `Accounting`), and a `scope` describing the part of the source the refresh covers (the `scope` shape depends on the API). See [Webhooks](/developer-guides/webhooks) for the full payload format and how to verify the signature. ### Reconnecting to a different account A connection keeps the same id even if its credentials are later re-entered to point at a **different** source account. When the sync detects that the connected account has changed — a genuine swap, not a routine re-authentication of the same account — it **wipes the connection's data layer store and rebuilds it from scratch** on that run, so data from two different accounts is never mixed. If you mirror the data layer into your own store, treat this like any other refresh: the run emits the usual `account.datalayer.data_deleted` and `data_changed` events, and a periodic full fetch reconciles anything you might have missed (see [Fetching data](/developer-guides/datalayer/fetching-data)). Re-authenticating the **same** account leaves the store untouched. ## Security and isolation The data layer is multi-tenant by construction. Every record stored on Chift's side carries the identifiers of the end-user it belongs to — the consumer, the connection and, for accounting, the folder. Chift plans to offer a hybrid architecture for this use case in the future. Next: [Activating the data layer](/developer-guides/datalayer/activation) walks through how to enable it on a connection and how to use the header in your requests. # Errors Source: https://docs.chift.eu/developer-guides/errors ## Introduction This document describes the shape of Chift errors and lists the errors you can expect from our different APIs. ### Chift error A Chift error is always composed of the following elements: * status: "error" * message: "message explaining the error" * error\_code: "unique error code to describe the error" * detail: "additional details explaining the error" (optional) The errors are always returned with an HTTP error code (4XX, 5XX). Note that the combination of the message and the error\_code is not always unique. Example of an error message: ```json theme={null} { "message": "The resource GET - /order is not supported by Cashpad", "status": "error", "error_code": "ERROR_RESOURCE_NOT_SUPPORTED" } ``` ### Specific errors Even if it's the goal to only use generic errors whenever possible, there are use cases where the raised errors are specific to the connectors. In such cases, those errors are described in the related connector documentation. ### List of errors | Error code | HTTP Status | Error Description | Used by APIs | Resolution | | ------------------------------------------------------------ | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------ | ---------------------------------------------------------------------------------------------------------------------------------- | | ERROR\_CHIFT\_AUTHENTICATION\_ERROR | 401 | Error with the provided Chift token or combination of clientId, clientSecret and accountId | All | | | ERROR\_CONNECTOR\_AUTHENTICATION | 401 | Error related to the authentication to the connector (wrong credentials, ...) | All | Please check the credentials used in the connector configuration | | ERROR\_CONNECTOR\_CONFIGURATION | 400 | Error related to the configuration of the connector not related to Chift (e.g. no license, connector not active, needs to be restarted, ...) | All | | | ERROR\_CONFIGURATION\_SYNC | 400 | Error in the configuration of the sync | All | The sync is not correctly configured for that consumer. Make sure that it was correctly configured and activated. | | ERROR\_NO\_ACTIVE\_CONNECTION | 400 | No active connection/integration for this API are configured | All | | | ERROR\_CONFIGURATION\_CONNECTION | 400 | Error related to the configuration of the connection (e.g. more than one connection is active, ...) | All | | | ERROR\_DATA\_VALIDATION | 400 | Impossible to retrieve data due to a data validation issue. Contact support for more details | All | | | ERROR\_API\_RESOURCE\_NOT\_FOUND | 400 | The route that was called does not exist. Make sure that you use the routes as specified in the documentation. | All | | | ERROR\_WEBHOOK\_NOT\_SUPPORTED | 405 | This webhook type is not supported for this integration | All | | | ERROR\_UNKNOWN | 400 | An unknown error occurred during the call. Please contact Chift team. | All | | | ERROR\_INVALID\_BODY | 422 | One of the input fields of the body is invalid | All | | | ERROR\_INVALID\_QUERY\_PARAMETER | 422 | One of the query parameters is invalid | All | | | ERROR\_INVALID\_PATH\_PARAMETER | 422 | One of the path parameters is invalid | All | | | ERROR\_INVALID\_RESPONSE | 422 | The response could not be built. Our support should be contacted. | All | | | ERROR\_RESOURCE\_NOT\_SUPPORTED | 405 | The requested resource is not supported by this connector. | All | | | ERROR\_TECHNICAL\_MAPPING | 400 | There is a technical error while processing the request. We are already alerted and working on this. Please contact support if needed. | All | There is a technical error. Please contact support if needed. | | ERROR\_INTEGRATION\_INVALID | 400 | The specified integration is invalid or could not be found | Connections | | | ERROR\_CONNECTION\_INFO\_EMPTY | 400 | A field in the connection is not filled in. | All | | | ERROR\_ORDER\_NOT\_FOUND | 404 | The given order could not be retrieved | POS | | | ERROR\_CUSTOMER\_NOT\_FOUND | 404 | The given customer could not be retrieved | POS | | | ERROR\_LOCATION\_NOT\_FOUND | 404 | The given location could not be found | POS | | | ERROR\_CONFIGURATION\_LOCALAGENT | 502 | Impossible to connect to the specified local agent (e.g. not configured, ...) | All | | | ERROR\_CONNECTOR\_MAINTENANCE | 503 | Impossible to connect to the target application | All | The target application is temporarily unable to handle a request. Please retry later. | | ERROR\_GATEWAY\_TIMEOUT | 504 | Impossible to connect to a remote application (for local agent) | All | | | ERROR\_BACKEND\_FORBIDDEN | 403 | Impossible to retrieve data due to a permission issue | All | Please authorize the access to the connector again | | REQUEST\_ALREADY\_PROCESSED | 409 | Request with same client request id was already successfully processed | All | | | REQUEST\_IN\_PROCESS | 409 | Request with same client request id is currently processed | All | | | ERROR\_RATE\_LIMIT | 429 | The rate limit has been reached for this connector. Please try again later. | All | | | ERROR\_BACKEND\_NOT\_FOUND | 504 | Impossible to connect to the specified backend (url, host, unique identifier,... might be incorrect or the backend is down) | All | | | ERROR\_BACKEND\_FORBIDDEN | 403 | Impossible to retrieve data due to a permission issue | All | | | ERROR\_UNEXPECTED | 400 | Unexpected error while trying to perform the request. This is often linked to some data being incorrectly managed. We are notified and are working proactively on those errors. | All | | | ERROR\_INTERNAL\_ERROR | 400 | Internal server error. This is often linked to a technical error. We are notified and are working proactively on those errors. | All | | | ERROR\_CONNECTOR\_MISSING\_EXTENSION | 400 | The connector requires an extension. | All | The connector is missing a required extension (please install or update) | | ERROR\_INVALID\_PERIOD | 400 | The given period is not valid (based on date\_from & date\_to parameters) | POS | | | ERROR\_INVALID\_HOST | 400 | The given host is not valid and the backend cannot be reached | POS | | | ERROR\_FOLDER\_NOT\_FOUND | 404 | Folder not found | Accounting | The requested folder was not selected during the connection process or does not exist in the accounting system | | ERROR\_INVALID\_VAT\_FORMAT | 422 | The VAT number doesn't seem to be correct. Please remove dots and whitespaces. The expected format is the following: BE0784930037 | Accounting | | | ERROR\_INVALID\_LANGUAGE\_FORMAT | 422 | The language format is not correct. Please use the ISO 639-1 codes. | Accounting | | | ERROR\_INVALID\_CURRENCY\_FORMAT | 422 | The currency format is not correct. Please use the ISO 4217 codes. | Accounting | | | ERROR\_INVALID\_COUNTRY\_FORMAT | 422 | The country format is not correct. Please use the ISO 3166-1 codes. | Accounting | | | ERROR\_INVALID\_FINANCIAL\_PERIOD\_FORMAT | 422 | The forced financial period must be 6 numbers (e.g. 02 for february and 2022 => 022022). | Accounting | | | ERROR\_BOOKS\_FROZEN | 422 | The books are frozen in the accounting tool. | Accounting | | | ERROR\_NO\_INVOICE\_LINE | 400 | The invoice must contain at least one invoice line. | Accounting | | | ERROR\_ZERO\_INVOICE | 400 | You cannot create an invoice with an untaxed amount of 0. | Accounting | | | ERROR\_ZERO\_LINE | 400 | You cannot create entries/invoices with a line equal to zero. | Accounting | | | ERROR\_NO\_OPERATION\_LINE | 400 | The miscellaneous operation must contain at least one line. | Accounting | | | ERROR\_INVALID\_OPERATION\_LINE\_TYPE | 400 | A line of type 'customer\_account' or 'supplier\_account' must have a 'partner\_id' filled in. | Accounting | | | ERROR\_OPERATION\_NOT\_BALANCED | 400 | The operation is not balanced. The sum of the lines must be zero. | Accounting | | | ERROR\_NOT\_ENOUGH\_MATCHING\_ENTRIES | 400 | Matching is only possible with at least 2 entries. | Accounting | | | ERROR\_ANALYTIC\_ACCOUNTING\_NOT\_ACTIVE | 405 | Analytic accounting is not active on this connection. | Accounting | | | ERROR\_ANALYTIC\_ACCOUNTING\_PLAN\_NOT\_CONFIGURED | 405 | A default analytic plan must be configured to use this endpoint. | Accounting | | | ERROR\_ANALYTIC\_ACCOUNT\_ALREADY\_EXISTS | 400 | An analytic account already exists with the same code in the accounting system. | Accounting | | | ERROR\_ANALYTIC\_ACCOUNT\_NOT\_FOUND | 404 | The analytic account doesn't exist in the accounting system. | Accounting | | | ERROR\_ANALYTIC\_PLAN\_NOT\_FOUND | 404 | The analytic plan doesn't exist in the accounting system. | Accounting | | | ERROR\_INVALID\_ANALYTIC\_DISTRIBUTION | 400 | There is an error with the analytic distribution. This error can come from an analytic plan or account being more than once in the analytic distribution; from a percentage not being between 1 and 100 or from an analytic plan not having a 100% coverage. | Accounting | | | ERROR\_INVALID\_ANALYTIC\_DISTRIBUTION\_ACCOUNTS | 400 | Each analytic plan in the analytic distribution of an invoice line must contain at least one analytic account. | Accounting | | | ERROR\_INVALID\_ANALYTIC\_DISTRIBUTION\_ACCOUNTS\_PERCENTAGE | 400 | Analytic accounts of each analytic plan in the analytic distribution of an invoice line must cover 100% of the amount of the invoice line. | Accounting | | | ERROR\_INVOICE\_AMOUNTS\_DO\_NOT\_MATCH | 400 | The amounts of the invoice are not correct. | Accounting | | | ERROR\_LINE\_AMOUNTS\_DO\_NOT\_MATCH | 400 | The amounts in one invoice line are not correct. | Accounting | Please make sure that tax amount and tax rate are correct. If no issue is detected, please contact Chift. | | ERROR\_TAX\_RATE\_NOT\_CORRESPONDING | 400 | The tax rate doesn't match the tax rate linked to the tax code in the accounting system. | Accounting | Please modify the mapping of that tax rate with a vat code of the same rate | | ERROR\_MULTIPLE\_GL\_ACCOUNTS | 400 | The entries have different receivable/payable accounts. | Accounting | | | ERROR\_MULTIPLE\_PARTNER\_ACCOUNTS | 400 | A sale/purchase entry cannot be linked to multiple partner accounts. | Accounting | | | ERROR\_ACCOUNT\_NUMBER\_NOT\_CONFIGURED | 400 | The account number is not configured to be used in entries. It cannot be imputed. | Accounting | | | ERROR\_ENTRY\_HAS\_INVALID\_STATUS | 400 | The entry doesn't have the correct status to be matched. | Accounting | | | ERROR\_ENTRY\_HAS\_NO\_ACCOUNT\_RECEIVABLE\_PAYABLE | 400 | The entry doesn't have a receivable/payable account. | Accounting | | | ERROR\_ENTRY\_NOT\_LINKED\_TO\_PARTNER | 400 | The entry is not linked to the partner mentioned in the matching body. | Accounting | | | ERROR\_ENTRY\_ALREADY\_RECONCILED | 400 | The entry is already reconciled in the accounting system. | Accounting | | | ERROR\_ENTRY\_ALREADY\_PARTIALLY\_MATCHED | 400 | An entry is already partially matched with another entry in the accounting system. | Accounting | | | ERROR\_JOURNAL\_NOT\_GOOD\_SCOPE | 400 | The journal cannot be used for this scope. | Accounting | The provided journal is not valid for the scope of the invoice. Please adapt it in your input or in your mapping (if using a sync) | | ERROR\_JOURNAL\_NOT\_CONFIGURED | 400 | The journal is not configured for a used functionality. | Accounting | | | ERROR\_TAX\_CODE\_NOT\_GOOD\_SCOPE | 400 | The tax code cannot be used for this type of invoices. | Accounting | Please adapt the tax code or update the mapping (if using a sync) | | ERROR\_MULTIPLE\_JOURNALS | 404 | Multiple journals were found. Please indicate the wanted journal in the request. | Accounting | | | ERROR\_JOURNAL\_NOT\_FOUND\_FOR\_SCOPE | 404 | Please indicate the wanted journal in the request. No journal has been found for this scope. | Accounting | | | ERROR\_INVOICE\_NUMBER\_ALREADY\_USED | 409 | The invoice number is already used in the accounting system. | Accounting | | | ERROR\_INVOICE\_ALREADY\_EXISTS | 409 | The invoice already exists in the accounting system. | Accounting | | | ERROR\_ENTRY\_NUMBER\_ALREADY\_USED | 409 | The entry number already used in the accounting system. | Accounting | | | ERROR\_PDF\_NOT\_APPLICABLE\_TO\_DRAFT\_INVOICE | 400 | You cannot upload a PDF when creating a draft invoice. | Accounting | | | ERROR\_TAX\_CODE\_NOT\_FOUND | 404 | The tax code doesn't exist in the accounting system. | Accounting | Please setup the tax code in the accounting system or adapt the tax code in the mapping (if using a sync) | | ERROR\_TAX\_CODE\_NOT\_CONFIGURED | 400 | The tax code is not configured to be used with this type of invoice. | Accounting | Please set up a payable account on the tax code in the accounting system | | ERROR\_ACCOUNT\_NUMBER\_NOT\_FOUND | 404 | The account number doesn't exist in the accounting system. | Accounting | Please create the ledger account in the accounting system | | ERROR\_OPERATION\_NOT\_FOUND | 404 | The operation doesn't exist in the accounting system. | Accounting | | | ERROR\_OPERATION\_NUMBER\_ALREADY\_USED | 409 | The operation number is already used in the accounting system. | Accounting | | | ERROR\_WRONG\_ACCOUNT\_TYPE | 400 | The account cannot be used for this type of line of a miscellaneous operation. | Accounting | | | ERROR\_BOOKYEAR\_NOT\_FOUND | 400 | The accounting system is not set up for this date. | Accounting | Create a fiscal year in the accounting system including the date of the invoice or verify why the fiscal year is not set up | | ERROR\_PERIOD\_CLOSED | 400 | The accounting period is closed in the accounting system. | Accounting | | | ERROR\_JOURNAL\_LOCKED | 400 | The journal is locked in the accounting system. | Accounting | Please unlock the journal in the accounting system | | ERROR\_INVALID\_FIELD\_FORMAT\_BANK\_ACCOUNT | 422 | The bank account/iban is not valid. | Accounting | | | ERROR\_INVALID\_FIELD\_FORMAT\_ANALYTIC\_ACCOUNT | 422 | The code of the analytic account doesn't follow the format of the corresponding accounting system. | Accounting | | | ERROR\_INVALID\_FIELD\_FORMAT\_ANALYTIC\_PLAN | 422 | The format of the field 'analytic\_plan' doesn't follow the format of the corresponding accounting system. | Accounting | | | ERROR\_INVALID\_FIELD\_FORMAT\_JOURNAL\_ID | 422 | The format of the field 'journal\_id' doesn't follow the format of the corresponding accounting system. | Accounting | | | ERROR\_INVALID\_FIELD\_FORMAT\_TAX\_CODE | 422 | The format of the field 'tax\_code' doesn't follow the format of the corresponding accounting system. | Accounting | | | ERROR\_INVALID\_FIELD\_FORMAT\_ENTRIES | 422 | The format of the IDs entries doesn't follow the format of the corresponding accounting system. | Accounting | | | ERROR\_JOURNAL\_ALREADY\_OPEN | 400 | The entry couldn't be created in the accounting system. The journal is already open. | Accounting | | | ERROR\_INVALID\_FIELD\_FORMAT\_ID | 422 | The format of the ID doesn't follow the format of the corresponding accounting system. | Accounting | | | ERROR\_INVALID\_FIELD\_FORMAT\_PARTNER\_ID | 422 | The format of the field 'partner\_id' doesn't seem to be correct for the corresponding accounting system. | Accounting | | | ERROR\_INVALID\_FIELD\_FORMAT\_COMPANY\_ID | 422 | The format of the field 'company\_id' doesn't seem to be correct for the corresponding accounting system. | Accounting | | | ERROR\_MISSING\_FIRST\_NAME | 400 | The field 'first\_name' must be filled in when the client/supplier is an individual. | Accounting | | | ERROR\_MISSING\_LAST\_NAME | 400 | The field 'last\_name' must be filled in when the client/supplier is an individual. | Accounting | | | ERROR\_MISSING\_INVOICE\_NUMBER | 400 | The target connector is expecting an invoice number. | Accounting | The field invoice number cannot be empty | | ERROR\_PARTNER\_ALREADY\_EXISTS | 400 | A client/supplier already exists with the same code/id in the accounting system. | Accounting | | | ERROR\_JOURNAL\_NOT\_FOUND | 404 | The journal doesn't exist in the accounting system. | Accounting | | | ERROR\_PARTNER\_NOT\_FOUND | 404 | The client/supplier doesn't exist in the accounting system. | Accounting | Make sure that the client/supplier is correctly created in the accounting system | | ERROR\_ENTRY\_NOT\_FOUND | 404 | The entry doesn't exist in the accounting system. | Accounting | | | ERROR\_DUPLICATE\_ENTRIES | 400 | Entries cannot contain duplicates. | Accounting | | | ERROR\_INVOICE\_NOT\_FOUND | 404 | The invoice doesn't exist in the accounting system. | Accounting | | | ERROR\_MISCELLANEOUS\_OPERATION\_NOT\_FOUND | 404 | The miscellaneous operation doesn't exist in the accounting system. | Accounting | | | ERROR\_LANGUAGE\_NOT\_FOUND | 404 | The specified language doesn't exist or is not active in the accounting system. | Accounting | | | ERROR\_CURRENCY\_NOT\_FOUND | 404 | The currency doesn't exist or is not active in the accounting system. | Accounting | | | ERROR\_NEGATIVE\_INVOICE | 400 | An invoice must be positive. The invoice type determines the sign of the invoice. | Accounting | | | ERROR\_ACCOUNT\_NUMBER\_NOT\_ACTIVE | 400 | An account number used in an invoice line is not active. | Accounting | Activate the ledger account in the accounting system | | ERROR\_PARTNER\_NOT\_ACTIVE | 400 | The used client/supplier is not active. | Accounting | | | ERROR\_ACCOUNT\_NUMBER\_NOT\_GOOD\_SCOPE | 400 | The account number cannot be used in this scope. | Accounting | | | ERROR\_INVALID\_INVOICE\_DATE | 400 | The period containing the invoice date is already locked. | Accounting | | | ERROR\_WRONG\_ENTRY\_TYPE | 400 | You can only create entries in a sale or purchase journal. | Accounting | | | ERROR\_MAX\_DIFFERENCE\_MONTHS | 400 | You can retrieve maximum 3 months of data at once. The difference between 'date\_from' and 'date\_to' is at maximum 3 months. | Accounting | | | ERROR\_ATTACHMENT\_ALREADY\_EXISTS | 400 | An attachment already exists for this invoice. | Accounting | | | ERROR\_INVALID\_BASE64\_STRING | 400 | The document is not a valid base64 string representing a PDF. | Accounting | | | ERROR\_INVALID\_DUE\_DATE | 422 | The due date must be after the invoice date. | Accounting | | | ERROR\_CHARGE\_PRODUCT\_ACCOUNT\_MISSING | 422 | Please provide at least one charge/product account. | Accounting | | | ERROR\_COLLECTIVE\_ACCOUNT\_MISSING | 422 | Please provide a client/supplier collective account. | Accounting | | | ERROR\_PARTNER\_ACCOUNT\_MISSING | 422 | Please provide a client/supplier account in the partner\_id field. | Accounting | | | ERROR\_ANALYTIC\_ACCOUNT\_ARCHIVED | 400 | The analytic account is archived. | Accounting | | | ERROR\_INVALID\_FIELD\_FORMAT\_INVOICE\_NUMBER | 422 | The format of the invoice number doesn't follow the format of the corresponding accounting system (e.g. too long) | Accounting | | | ERROR\_INVALID\_FIELD\_FORMAT\_OPERATION\_NUMBER | 422 | The format of the operation number doesn't follow the format of the corresponding accounting system (e.g. too long) | Accounting | | | ERROR\_INVALID\_FIELD\_FORMAT\_NUMBER | 422 | The format of the number doesn't follow the format of the corresponding accounting system (e.g. too long) | Accounting | | | ERROR\_ANALYTIC\_ACCOUNT\_NUMBER\_PLAN\_NOT\_ACTIVE | 400 | The account number cannot be used (is not configured) with an analytic account of the specified analytic plan | Accounting | | | ERROR\_LEDGER\_ACCOUNT\_ALREADY\_EXISTS | 400 | A ledger account already exists with the same number in the accounting system. | Accounting | | | ERROR\_NUMBER\_ALREADY\_USED | 400 | The number of the invoice is already used in the accounting system. | Accounting | | | ERROR\_COUNTERPART\_ACCOUNT\_NUMBER\_NOT\_GOOD\_SCOPE | 400 | The counterpart account number cannot be used in this scope. | Accounting | | | ERROR\_COUNTERPART\_ACCOUNT\_NOT\_FOUND | 400 | The counterpart account doesn't exist in the accounting system. | Accounting | | | ERROR\_COLLECTIVE\_ACCOUNT\_NOT\_CONFIGURED | 400 | The collective account is not set up for customer/supplier. | Accounting | | | ERROR\_JOURNAL\_ALREADY\_EXISTS | 400 | A journal already exists with the same code in the accounting system. | Accounting | | | ERROR\_COUNTERPART\_ACCOUNT\_ALREADY\_USED | 400 | The counterpart account is already linked to another journal. | Accounting | | | ERROR\_LEDGER\_ACCOUNT\_ALREADY\_EXISTS | 400 | A ledger account already exists with the same number in the accounting system. | Accounting | | | ERROR\_COUNTERPART\_ACCOUNT\_NOT\_ALLOWED | 400 | You can only specify a counterpart account on Bank and Cash journals. | Accounting | | | ERROR\_MISSING\_COUNTERPART\_ACCOUNT | 400 | You must specify a counterpart account on Bank and Cash journals. | Accounting | | | ERROR\_PERIOD\_BLOCKED | 400 | The accounting period is currently blocked due to a revision. | Accounting | | | ERROR\_PDF\_MUST\_BE\_UNIQUE | 400 | The pdf already exists in the accounting system. | Accounting | The invoice that you are trying to create already exists in the target tool. It must be unique. | | ERROR\_ENTRY\_ITEMS | 400 | You need to push at least 2 entry items. | Accounting | | | ERROR\_BANK\_ACCOUNT\_NUMBER\_ALREADY\_EXISTS | 400 | The bank account number already exists in the accounting system. | Accounting | | | ERROR\_INVALID\_FIELD\_FORMAT\_STATEMENT\_NUMBER | 422 | The statement id/number format is not accepted by the accounting software. | Accounting | | | ERROR\_CUSTOMER\_NOT\_FOUND | 404 | The customer doesn't exist. | eCommerce | | | ERROR\_PRODUCT\_NOT\_FOUND | 404 | The product doesn't exist. | eCommerce | | | ERROR\_VARIANT\_NOT\_FOUND | 404 | The variant doesn't exist. | eCommerce | | | ERROR\_LOCATION\_NOT\_FOUND | 404 | The location doesn't exist. | eCommerce | | | ERROR\_ORDER\_NOT\_FOUND | 404 | The order doesn't exist. | eCommerce | | | ERROR\_SHOPIFY\_CUSTOMER\_DATA\_ACCESS | 403 | The Shopify app is not configured to have access to customer data. See Shopify documentation. | eCommerce | | | ERROR\_PHONE\_INVALID | 422 | The phone number doesn't seem to be valid. The number must begin with the country code. | eCommerce | | | ERROR\_PHONE\_ALREADY\_USED | 422 | The phone number is already used by another client. | eCommerce | | | ERROR\_INVALID\_FIELD\_FORMAT | 422 | The date format of the query parameter 'Date From' or 'Date To' is not valid. The expected format is the following: YYYY-MM-DD. | eCommerce | | | ERROR\_NO\_ORDER\_LINE | 400 | New orders must have at least one line. | eCommerce | | | ERROR\_INVALID\_CURRENCY\_FORMAT | 422 | The currency format is not correct. Please use the ISO 4217 codes. | eCommerce | Please use the ISO 4217 codes. | | ERROR\_INVALID\_COUNTRY\_FORMAT | 422 | The country format is not correct. Please use the ISO 3166-1 codes. | eCommerce | | | ERROR\_OPPORTUNITY\_NOT\_FOUND | 404 | The opportunity doesn't exist. | Invoicing | | | ERROR\_PRODUCT\_NOT\_FOUND | 404 | The product doesn't exist. | Invoicing | | | ERROR\_TAX\_NOT\_FOUND | 404 | The tax doesn't exist. | Invoicing | | | ERROR\_INVOICE\_NOT\_FOUND | 404 | The invoice doesn't exist. | Invoicing | | | ERROR\_OPPORTUNITY\_NOT\_CREATED | 400 | The opportunity was not created. | Invoicing | | | ERROR\_PRODUCT\_NOT\_CREATED | 400 | The product was not created. | Invoicing | | | ERROR\_TAX\_NOT\_CREATED | 400 | The tax was not created. | Invoicing | | | ERROR\_INVOICE\_NOT\_CREATED | 400 | The invoice was not created. | Invoicing | | | ERROR\_DUPLICATE\_PAYOUT | 409 | The payout already exists. | Payment | | # How Chift works Source: https://docs.chift.eu/developer-guides/how-it-works Chift sits between your software and your end-users' financial tools. Whichever way you use it, the same three objects show up — learn them once here. ## The three objects Everything in Chift is built from three objects, and how they relate is the part worth getting straight up front: A consumer holds connections, each linking to one connector * **Connector** — software Chift talks to (Odoo, Sage, Shopify, Lightspeed). Chift builds and maintains these; you choose which to activate. In your product, an integration you offer. * **Consumer** — one of your end-users, identified by a uuid (`consumerid`). In your product, a tenant or account in your database — usually one per end-user. * **Connection** — one consumer linked to one connector, holding that end-user's credentials and configuration. *"This end-user connected their Odoo."* Chift's API paths and fields use the word **integration** (`GET /integrations`, `integrationid`) for historical reasons. In the documentation we say **connector**. They mean the same thing. ## Two ways to use Chift Both start from the same connectors, consumers, and connections. What differs is who writes the integration logic and who triggers it. **You build the integration and you have the lead.** You call Chift's endpoints directly and read or write your end-users' data whenever your product needs to. **Chift builds the integration and triggers the flows.** We set up the synchronisation with you and run it on an event or a schedule — no integration code on your side. Most developers start with the Unified API. Syncs suit teams who would rather delegate the build and the running of the flow to Chift. ## Next steps Exchange your API key for a bearer token — needed for both models. Short definitions of every Chift term. # Monitoring and updating connections Source: https://docs.chift.eu/developer-guides/monitor-connections This guide explains how to monitor the status of existing connections and how to update them if needed.\ It is intended for developers managing consumer connections in Chift. ## Monitor connection status Once the activation link has been shared, you need to verify whether the connection was successfully established. There are several options: #### 1. Webhook Subscribe to the `account.connection.created` event.\ Triggered automatically when the connection becomes active. > ⚠️ **Important:**\ > The `account.connection.created` webhook is only triggered when the connection has been successfully created.\ > If the consumer never completes the activation, **no webhook event will be sent**.\ > We therefore recommend combining this with another logic — for example, a timeout or periodic check — to handle incomplete activations. [Webhook Docs ↗️](https://docs.chift.eu/developer-guides/webhooks#list-of-events) #### 2. API call Retrieve all connections linked to a consumer and check their `active` status. **Endpoint:** `Get connections`\ [API Reference ↗️](https://docs.chift.eu/api-reference/endpoints/connections/get-connections) **Required field:** * `consumerId` — From the consumer creation step #### 3. Redirect URL parameters If a `redirect_url` was set when creating the consumer, Chift automatically appends query parameters when your end-user is redirected after activation. **Returned parameters:** * `consumerId` * `connectionId` * `connectionStatus` (`active` / `inactive`) * `error` *(only in case of error)* * `isExpiredError` *(only in case of error)* More details on the feature and how to activate it: [Configure account ↗️](https://docs.chift.eu/back-office/getting-started/configure-account#redirect-url-parameters) *** ## Update an existing connection ⚠️ **Pro tip:** Do **not** delete and recreate a connection if credentials expire or activation was not completed.\ Instead, use the update endpoint to resend the activation link or adjust metadata (e.g. `name`, `redirect_url`). **Endpoint:** Update an existing connection\ [API Reference ↗️](https://docs.chift.eu/api-reference/endpoints/connections/update-an-existing-connection) **Required fields:** * `consumerId` — From consumer creation * `connectionId` — From connection creation > Updating a connection allows you to maintain active links without forcing your end-user to reconnect from scratch.\ > This preserves historical data and ensures smoother API usage. *** ## Connection lifecycle A connection is either **active** or **inactive**. Only an active connection can serve Unified API calls. Chift manages the status for you: it moves through the lifecycle automatically as your end-user completes activation, as credentials are refreshed, and as they expire or are revoked. The API and [webhooks](/developer-guides/webhooks) give you visibility into every transition so you can build the right experience around it. Connection lifecycle ### Post-connections Some connectors ask follow-up questions *after* the credentials are accepted — choose the POS location, choose the accounting folder. These are called **post-connections**, and they exist because the available options can only be read once the connection works. Some are mandatory; others you can switch on per connector in its settings, depending on how much you want to delegate to Chift. `GET /integrations` returns each connector's `post_connections` so you can see what your end-user will be asked. ### Local agent A few connectors talk to on-premise software and need the **local agent**, a small executable that bridges Chift and the end-user's machine. Those connections emit extra webhooks telling you when the agent goes up or down, and a request made while the agent is down returns a specific error. See [Local agent](/back-office/advanced/local-agent). # Rate limits Source: https://docs.chift.eu/developer-guides/rate-limits There are **no rate limits on requests sent to Chift**.\ You can make as many API calls as needed — Chift does not impose any internal restrictions. Any limitations you may encounter come directly from the **connected third-party software** (connectors).\ **⬇️ IMPORTANT ⬇️** **Connector-specific rate limits**\ If a connector enforces rate limits, they are **documented on the connector’s page**. Check the full list here: [**Chift Connectors Documentation**](https://docs.chift.eu/connectors/connectors). **Fair usage policy** While Chift does not impose strict rate limits, we expect you to follow a fair usage policy.\ We actively monitor traffic patterns to ensure platform stability and equitable access for all users.\ In case of excessive or abusive usage that impacts overall performance, Chift reserves the right to temporarily throttle or block requests until the issue is resolved. ### How Chift handles rate limits Even though Chift doesn’t define its own limits, we handle rate limits from connectors gracefully to avoid unnecessary errors and ensure stable synchronizations. We distinguish between two main types of rate limits: #### 1. Daily rate limits When a connector enforces a **daily limit**, Chift cannot bypass it.\ In such cases, we return a clear error specifying: * the type of rate limit, and * the remaining time before it resets. This lets you retry the operation later, once the limit expires. #### 2. Short-term (minutely) rate limits For short-term rate limits, Chift automatically retries the request to maximize the success rate. By default: * up to **5 retries** are performed, * with **exponential backoff** between attempts: 1s, 2s, 4s, 8s, and 16s. This helps smooth out temporary rate spikes without immediately failing the process. > **Note:** If all retries ultimately fail, Chift returns an error with a **specific code and message** indicating a **rate limit issue**.\ > When the connector does not provide clear information about rate limits, the error may appear as a **generic synchronization failure**. *** ### Custom handling For some connectors, we apply **custom retry logic** based on the additional information available in their documentation or error messages.\ For example, when a “retry-after” value is provided, Chift will respect it. This retry logic is **fully abstracted** from your side — you don’t need to handle it manually.\ Its purpose is simply to maximize reliability and reduce unnecessary failures caused by rate limits. # SDKs and tools Source: https://docs.chift.eu/developer-guides/sdk At Chift, our goal is to help companies scale their integrations.\ To make development faster and smoother, we provide several SDKs and tools to help you connect to our API in just a few minutes. ## 🐍 Python SDK Quickly integrate Chift into your Python projects. **Repository:** [Chift-Python-SDK](https://github.com/chift-oneapi/chift-python-sdk) ## 🟩 Node.js SDK Easily connect to Chift from your Node.js applications. **Repository:** [Chift-NodeJS-SDK](https://github.com/chift-oneapi/chift-nodejs-sdk) ## 📬 Postman or similar tools (Smuggler) Explore and test the Chift API directly with our ready-to-use Postman collection. **OpenAPI file:** [https://api.chift.eu/openapi.json](https://api.chift.eu/openapi.json) You can import this file into Postman (or any compatible API client) to instantly access all available endpoints and example requests. ## 💡 Other SDKs If you’re using another programming language, let us know which SDK you’d like to see next.\ You can reach us at **[support@chift.eu](mailto:support@chift.eu)** — we’re always happy to expand our ecosystem based on developer needs. # Building with Syncs Source: https://docs.chift.eu/developer-guides/syncs/overview In the Sync model, **Chift builds the integration and triggers the flows**. Rather than calling connector data yourself, you delegate the synchronisation to Chift: we define it with you and run it on an event or a schedule, with no integration code on your side. New to the terms *connector*, *consumer*, and *connection*? See [How it works](/developer-guides/how-it-works) first. Sync model ## How a sync works A **sync** is a synchronisation between two of Chift's APIs, built and maintained by Chift. It contains one or more **flows**, each triggered by an event or a timer (for example, every night at 4 AM), running a process — such as *get invoices and inject them into accounting* — for every consumer linked to the sync. During onboarding you can add **mappings**, correspondences your end-user confirms — for example matching tax rates between their POS and their accounting software. ## What stays the same You still create consumers and connections exactly as in the [Unified API model](/developer-guides/unified-api/overview) — a sync runs on top of those connections. What you don't write is the integration logic that moves the data; Chift owns that. ## Learn more The Syncs product documentation covers the full picture — building, exposing to end-users, and the ready-to-use syncs: Requirements, how we build a sync with you, and the dedicated endpoints. The full Syncs section, including ready-to-use syncs. Syncs are set up together with the Chift team. [Contact us](https://www.chift.eu/contact) to scope one for your use case. # Activation links and redirects Source: https://docs.chift.eu/developer-guides/unified-api/activation-and-redirects Reference for the activation link returned by [connection creation](/developer-guides/unified-api/how-to-connect), and for where your end-user lands afterwards. ## The activation link Creating or updating a connection returns one field, `url`. Properties worth knowing: * Secured by a token that expires **30 minutes** after generation. * Single purpose: it activates one connection for one consumer. * Safe to email, but generate it close to when the user will click it. If it expires, `PATCH` the connection to get a fresh one. ## The two parameters Redirect behaviour is controlled by two settings that are easy to confuse: | | Set where | Controls | | -------------- | --------------------------------------- | --------------------------------------------------------------------- | | `redirect` | Body of the connection `POST` / `PATCH` | **Whether** Chift redirects the user after the flow. Default `false`. | | `redirect_url` | On the consumer, or account-wide | **Where** the user is sent. | `redirect_url` can be set per consumer (at creation or update) or once for the whole account — see [Configure account](/back-office/getting-started/configure-account#default-redirection-url). **When both are set, the consumer-level value wins.** `redirect` is ignored when you pass `integrationid`. With a connector already chosen, Chift always redirects to `redirect_url` on success. There is no marketplace page left to return to. ## On connection creation | Request | Behaviour after activation | | ----------------------------------------------------- | ------------------------------------------------------------------------------------- | | `integrationid` provided | Redirects to `redirect_url`. | | `integrationid` omitted, `redirect = true` | Redirects to `redirect_url` after the user completes the flow on Chift's marketplace. | | `integrationid` omitted, `redirect = false` (default) | User stays on Chift's marketplace page. | ## On connection update | Request | Outcome | Behaviour | | ------------------ | --------------------- | ---------------------------------------------------------------------------------------------------------------- | | `redirect = true` | Success | Redirects to `redirect_url`. | | `redirect = true` | Error or user cancels | Stays on the page so the user can retry. **Cancel** or **Back to \[account name]** sends them to `redirect_url`. | | `redirect = false` | Success | Redirects to Chift's marketplace page. | | `redirect = false` | Error or user cancels | Stays on the page so the user can retry. **Cancel** or **Back to \[account name]** sends them to `redirect_url`. | ## URL parameters on return When a redirect happens, Chift can append query parameters describing the result: | Parameter | Value | | ------------------ | ------------------------------------------------------------ | | `consumerid` | The consumer that was being connected. | | `connectionid` | The connection that was created or updated. | | `connectionstatus` | `active` or `inactive`. | | `error` | Present only on failure. | | `isexpirederror` | Present only on failure, when the cause was an expired link. | This must be switched on for your account — see [Configure account](/back-office/getting-started/configure-account#redirect-url-parameters). Until it is, your callback receives a bare `redirect_url` with no parameters. These parameters are convenient but **not a reliable completion signal**: a user who abandons the flow never returns, and a browser can be closed mid-redirect. Pair them with a webhook or a periodic check — see [Monitoring & updating connections](/developer-guides/monitor-connections). ## Related * [Create a connection](/developer-guides/unified-api/how-to-connect) * [Monitoring & updating connections](/developer-guides/monitor-connections) * [Configure account](/back-office/getting-started/configure-account) # Caching in Chift API Source: https://docs.chift.eu/developer-guides/unified-api/caching To ensure optimal performance and minimize load on connected systems, all data retrieved through the Chift API is temporarily cached on our side. Here's how caching works and how to use it safely. ## How caching works * **Cache duration:** Data retrieved via the API is cached for a maximum of 5 minutes. * **Refreshing cached data:** When new data is fetched (e.g., retrieving a later page of results), the cache is updated and the 5-minute lifetime is reset. * **Scope:** Caching applies to all GET requests, including paginated responses. The cache may contain more items than the page requested to reduce the number of calls made to the source system. For connectors that support bigger page sizes than the ones served by Chift, optimizations are made to reduce the number of requests. This can lead to multiple pages worth of data being cached from the first page requested. When non-cached data is requested, already cached data has its lifetime reset to ensure consistency with the newly fetched data. ## Forcing a refresh In cases where fresh data is required immediately—such as after creating a new object—you can bypass the cache using the `x-chift-force-refresh` HTTP header: ```http theme={null} GET /journals x-chift-force-refresh: true ``` The response fetched with this header is also cached.\ A typical workflow using this header looks like this: 1. Get Journals (without header) 2. Create Journals 3. Get Journals (with `x-chift-force-refresh` header) ## Important considerations * The `x-chift-force-refresh` header should only be used in specific scenarios, such as retrieving data immediately after creating a new object. * Using this header indiscriminately can impact API performance. Chift reserves the right to temporarily block excessive calls that misuse this header. * In general, relying on cached responses is recommended to ensure consistent performance and minimize load on both Chift and connected systems. # Managing multiple connections Source: https://docs.chift.eu/developer-guides/unified-api/connections Advanced topic. Read [How it works](/developer-guides/how-it-works) for the basic model, and [Create a connection](/developer-guides/unified-api/how-to-connect) for the standard flow. ## The rule A consumer can have several connections, but **only one connection per connector**. Odoo and Sage side by side is fine; two Odoo connections for the same consumer is not. The second `POST` returns an HTTP error `400`. ## Multiple connectors serving the same Unified API Two different connectors can serve the same Unified API. A consumer connected to both Odoo *and* Sage has two connections behind the Accounting API, and a plain request is ambiguous: Chift cannot tell which one you mean. In that case, pick the connection explicitly with one of these headers: | Header | Value | | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `X-Chift-Integrationid` | The connector's `integrationid`, from [Get list of integrations](/api-reference/endpoints/integrations/get-list-of-integrations). | | `X-Chift-Connectionid` | The uuid of the specific connection, from [Get connections](/api-reference/endpoints/connections/get-connections). | You only need these when one consumer has several connections serving the **same** Unified API. Otherwise Chift resolves the connection for you and no header is required. ## Multiple consumers for the same end-user Sometimes your end-user needs access to the same connector more than once — for example, an accounting firm managing several folders in the same accounting system, where the connector doesn't support multi-folder or multi-entity natively. The solution is to create **one consumer per connection**. Each consumer independently connects to the same connector, and you call the Unified API once per consumer. Creating multiple consumers for the same end-user has no pricing impact — pricing is based on connections, not consumers. ## Related * [Create a connection](/developer-guides/unified-api/how-to-connect) * [Connection lifecycle](/developer-guides/monitor-connections#connection-lifecycle) # Good practice - Create and Update requests Source: https://docs.chift.eu/developer-guides/unified-api/good-practice-create-and-update-requests Chift's unified API exposes two verbs for writes: **POST** to create a resource, and **PATCH** to update one. There is no PUT endpoint. Updates are always partial, never a full replace. ## Creating resources (POST) Include a unique `x-chift-client-requestid` header on every POST. If a network timeout or retry causes the same request to be sent twice, Chift returns `REQUEST_ALREADY_PROCESSED` instead of creating a duplicate. See [Idempotency](/developer-guides/unified-api/idempotency) for the full mechanism, and use [Transaction Monitoring](/api-reference/endpoints/connections/get-transaction-information) to check the outcome of a request whose response you never received (e.g. after a client-side timeout). A successful POST returns the created resource. For long-running or asynchronous operations, the transaction monitoring endpoint also exposes `created_entity_id`, so you don't need a separate lookup to find what was created. The same payload can be valid for one target system and invalid for another (e.g. a required tax field, an account that must pre-exist). Treat validation errors as expected, not exceptional, and surface `error_code` + `detail` to your own users rather than a generic failure. ## Updating resources (PATCH) PATCH bodies are partial by design. Every field is optional. Only include the fields you actually want to modify; omitted fields are left untouched on the target system. Do **not** re-send a full resource read back from a GET as your PATCH body. If the resource has fields you didn't set yourself (defaults, computed values, connector-specific extras), re-submitting them can overwrite state you didn't intend to touch. If a field represents a running total or counter, fetch the current value and PATCH the new absolute value. Don't assume the API will "add" to it. PATCH sets fields; it doesn't apply deltas. The `x-chift-client-requestid` header works the same way on PATCH as on POST. Use it when a retry must not risk being applied twice. **PATCH is per-connector, not per-field-universal** A field accepted by one connector's PATCH schema may be silently ignored by another if the target software doesn't support updating it after creation (this is the same pattern as `vat_account` in [`tax_info`](/developer-guides/api-guides/accounting/vat-on-journal-entry-lines)). Check the connector's coverage page before relying on a field being mutable. # Create a connection Source: https://docs.chift.eu/developer-guides/unified-api/how-to-connect A **connection** links one of your end-users to one of their software packages. This page walks through creating one, from an empty consumer to a link your end-user can open. New to the model? Read [How it works](/developer-guides/how-it-works) first. It defines connector, consumer, and connection in two minutes. ## Prerequisites 1. **An API key**, and a bearer token obtained from it — see [Authenticate with Chift API](/developer-guides/chift-authentication). 2. **At least one active connector** on your account — see [Activate a connector](/back-office/getting-started/activate-connector). Connectors you have not activated are invisible to the API and cannot be connected. ## Two ways to present the choice The one thing that differs is **who shows your end-user the list of connectors to choose from**. Everything else in the flow is the same. It is a trade-off between a native experience and how much you build. **Embedded connector-picker** — you show the connector choice inside your own product. The most seamless, on-brand experience for your end-user, but you build and maintain that screen. Connector choice shown inside your own product **Chift connector-picker** — Chift hosts the connector picker. Nothing to build on your side, but your end-user briefly leaves your interface for a Chift-hosted page. Connector picker on the Chift-hosted connector-picker Both end the same way: a link you send your end-user. The mechanics differ only slightly. The embedded path uses the [fetch-connectors step](#the-flow) and passes an `integrationid`; the Chift path skips both. ## The flow Create one consumer per end-user. Store the returned `consumerid` on your end-user record — you reuse it for every connection that end-user makes. ```bash theme={null} curl -X POST https://api.chift.eu/consumers \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "Your end-user's company name", "internal_reference": "your-internal-end-user-id", "email": "contact@your-end-user.example", "redirect_url": "https://yourapp.example/integrations/callback" }' ``` | Field | Required | Notes | | -------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `name` | Yes | Shown in your Chift platform and used in automated emails. | | `email` | No | Used for [activation reminders](/back-office/user-onboarding/email-reminders) and emailing the [local agent](/back-office/advanced/local-agent) installer. | | `internal_reference` | No | Your own ID for this end-user. Makes reconciliation much easier later. | | `redirect_url` | No | Where the end-user lands after activation. Can also be set once for the whole account — see [Activation links and redirects](/developer-guides/unified-api/activation-and-redirects). | Already have a `consumerid` for this end-user? Skip this step. [API reference: Create new consumer ↗](/api-reference/endpoints/consumers/create-new-consumer) Skip this step if you use the Chift connector-picker. ```bash theme={null} curl "https://api.chift.eu/integrations?status=active" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" ``` `status=active` returns only the connectors you have activated. Each entry gives you: * `integrationid` — an **integer**, the value you send in 4. Note it is not a uuid, unlike most Chift identifiers. * `name`, `description`, `api` — for display and grouping. * `logo_url`, `icon_url` — ready-to-use image URLs. A [base64 endpoint](/api-reference/endpoints/integrations/returns-a-logoicon-of-an-integration-as-base64) also exists if you prefer to proxy them. * `supported_countries`, `local_agent` — useful for filtering or warning the user upfront. [API reference: Get list of integrations ↗](/api-reference/endpoints/integrations/get-list-of-integrations) Two ways to do this — pick the one matching your setup (see [Two ways to present the choice](#two-ways-to-present-the-choice)): **Embedded connector-picker** — render the list from step 2 in your own UI. To narrow it, filter on `supported_countries`, or on `api` if this part of your product only needs one Unified API. You pass the chosen `integrationid` in the next step. **Chift connector-picker** — nothing to build here. Skip this step and omit `integrationid` in the next step; your end-user picks their software on the Chift-hosted page after you send them the link. Create the connection for this consumer with `POST`: ```bash theme={null} curl -X POST https://api.chift.eu/consumers/{consumerid}/connections \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "integrationid": 42, "name": "Odoo" }' ``` | Field | Required | Notes | | --------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | | `integrationid` | No | Integer from step 2. Omit it to let the user choose on Chift's connector-picker page. | | `name` | No | Display name. Only valid **together with** `integrationid`. | | `redirect` | No | Default `false`. Ignored when `integrationid` is set. See [Activation links and redirects](/developer-guides/unified-api/activation-and-redirects). | | `country` | No | ISO 3166-1 alpha-2, filters the connector-picker list. Ignored when `integrationid` is set. | | `apis` | No | Restricts the connector-picker to given Unified APIs. Ignored when `integrationid` is set. | The call returns a single field: `url`. If the consumer already has this connection (for example to refresh expired credentials) update it instead of creating a new one. This issues a fresh activation link while preserving the connection and its history. See [Update an existing connection ↗](/api-reference/endpoints/connections/update-an-existing-connection). [Add new connection ↗](/api-reference/endpoints/connections/add-new-connection) Redirect your end-user to the returned `url`, or email it to them. The link is secured by a token that expires after **30 minutes**. Generate it when the user is about to click it, not in advance. With `integrationid` set, the link goes straight to that connector; without it, your end-user first picks their software on the Chift connector-picker (see [Two ways to present the choice](#two-ways-to-present-the-choice)). What the user then sees depends on the connector: an OAuth2 consent screen, a credentials form, or instructions to install the [local agent](/back-office/advanced/local-agent). Some connectors then ask follow-up questions — which accounting folder, which POS location. When the user finishes, reload their connections and confirm at least one is `active`. Then you can call the Unified API for that consumer. Do not rely on the redirect alone — a user who abandons the flow never triggers it. See [Monitoring & updating connections](/developer-guides/monitor-connections) for the webhook, polling, and redirect-parameter options, and which combination to use. ## Next steps Confirm activation, then keep connections healthy. Control where the user lands afterwards. Every code the endpoints above can return. # Idempotency Source: https://docs.chift.eu/developer-guides/unified-api/idempotency To prevent duplicate resource creation and depending on your use case, you can include in your POST request (such as one that creates an invoice) a unique value in the X-Chift-Client-RequestId header.\ \ This ensures that each POST request is processed exactly once by our API. Uniquely identifying POST requests that create new resources is particularly crucial when the response outcome is uncertain due to temporary service disruptions, such as server timeouts or network failures.\ \ In such cases, the client application can safely retry the request without the risk of duplicate operations.\ API endpoints that guarantee a request is processed only once, regardless of how many times it is retried with the same unique identifier, are referred to as idempotent. ### How to use it? Include in your request to Chift, the following header: `x-chift-client-requestid: 123456` The value (`123456` in this example) is a unique identifier that you generate and manage on your side: 1. **Format and storage:** It must be a **varchar(255)**, meaning it can contain up to 255 characters. You are responsible for generating it in a way that guarantees uniqueness for each request. 2. **Scope and usage:** The header is not tied to a specific endpoint and can be included in any request. Each value must be unique per request, regardless of the endpoint, to ensure duplicates are correctly detected. 3. **Uniqueness per connection:** The request id must be unique **per connection**. The same value can safely be reused across different connections without conflict, but reusing it within the same connection will be detected as a duplicate. 4. **Time to live:** Chift keeps logs of these identifiers for **6 months**. ### What can you expect? You can expect a 409 error code in case your request was processed (REQUEST\_ALREADY\_PROCESSED) or currently in processing (REQUEST\_IN\_PROCESS): E.g. ```text theme={null} { "status": "error", "message": "Request already processed: 200", "detail": "Request with same client request id {client_request_id} was already successfully processed", "error_code": "REQUEST_ALREADY_PROCESSED" } ``` ```text theme={null} { "status": "error", "message": "Request is in processing", "detail": "Request with same client request id {client_request_id} is currently processed", "error_code": "REQUEST_IN_PROCESS" } ``` ### Monitoring The transaction endpoint ([API Reference ↗️](/api-reference/endpoints/connections/get-transaction-information)) allows you to retrieve detailed information about any API transaction using the `x-chift-client-requestid`. This is particularly useful for auditing, troubleshooting, or tracking the status of a request. For **POST endpoints**, the response also returns the `created_entity_id`, giving you the identifier of the newly created entity directly in the monitoring response. **Key points:** * This endpoint is ideal for monitoring asynchronous or long-running operations, providing a single source of truth for the status and result of any request. * If you decide to implement a **timeout** on your requests—for example, terminating the connection after 30 seconds or 1 minute—Transaction Monitoring allows you to track the outcome of requests that continue executing on Chift even after your timeout has cut the connection. * The monitoring endpoint works across all connectors. # Incremental synchronization Source: https://docs.chift.eu/developer-guides/unified-api/incremental-synchronization When you synchronize your end-users' financial data with the Unified API, you want to fetch only what's new or changed since your last synchronization. Incremental synchronization is the most efficient way to keep data up-to-date without fetching the entire dataset on every run. ## Why incremental synchronization matters Fetching all records on every synchronization has real costs: * **Slower synchronizations** — more data to transfer and process * **Higher load** on the connected systems * **Unnecessary processing** — comparing all records to detect changes is expensive * **Rate limiting risk** — repeated full synchronizations can hit connector rate limits With incremental synchronization, you only fetch what's changed since your last successful synchronization. ## How it works Most Chift Unified API collection endpoints support the `updated_after` parameter, which returns only records created or updated on or after a specified timestamp. 1. Store the timestamp of your last successful synchronization 2. On the next synchronization run, pass that timestamp as `updated_after` 3. Process only the new and updated records 4. Store the new timestamp for the next run ### Example request ```http theme={null} GET /accounting/clients?updated_after=2024-10-15T14:30:00Z Authorization: Bearer ``` **Response:** Only clients created or updated after `2024-10-15T14:30:00Z`. *** ## Implementing incremental synchronization ### 1. Check if `updated_after` is supported The API reference for each endpoint documents whether `updated_after` is available. Not all connectors support it for every endpoint, and some newer connectors may have limited support. ### 2. Store your last synchronization timestamp Keep the timestamp of your last successful synchronization for each consumer and each endpoint. This is the value you'll pass as `updated_after` on the next run. ```javascript theme={null} // Example: storing the last synchronization time in your database const lastSyncTime = new Date('2024-10-15T14:30:00Z'); const response = await fetch( `https://api.chift.eu/consumers/{consumer_id}/accounting/clients?updated_after=${lastSyncTime.toISOString()}`, { headers: { 'Authorization': `Bearer ${token}`, } } ); // After successful processing: await db.updateLastSync(consumerId, 'customers', new Date()); ``` *** ## First synchronization: full initial load On your first synchronization for a consumer, you don't have a previous timestamp to use. Instead, use the `date_from` and `date_to` parameters (if supported) to load historical data, or simply fetch all records without `updated_after`. ```http theme={null} GET /accounting/clients Authorization: Bearer ``` After this initial load completes successfully, store the timestamp and switch to incremental synchronizations with `updated_after`. ```javascript theme={null} // First synchronization: full load if (!hasPreviousSyncTime) { // Fetch all records in the desired date range const firstSyncResponse = await fetch( `https://api.chift.eu/consumers/{consumer_id}/accounting/clients`, { headers: /* ... */ } ); // Process all records... // Store the synchronization time for next run lastSyncTime = new Date(); } else { // Subsequent synchronizations: incremental only const incrementalResponse = await fetch( `https://api.chift.eu/consumers/{consumer_id}/accounting/clients?updated_after=${lastSyncTime.toISOString()}`, { headers: /* ... */ } ); // Process only changed records... } ``` *** ## When `updated_after` is not supported Some connectors don't support incremental synchronization for certain endpoints. When this happens, you'll need to manually track changes by comparing the current response with your stored records. ### Strategy: Compare and identify changes 1. **Fetch all records** from the endpoint (you'll need to paginate if there are many) 2. **Compare** each record with your stored version 3. **Identify** three types: * **New records** — in the API response but not in your system * **Updated records** — in your system but with changed values (check `updated_at` if available) * **Deleted records** — in your system but missing from the API response (optional: implement soft deletes or mark as archived) ### Performance considerations Manually comparing all records is less efficient than true incremental synchronization. We recommend: * Requesting higher [pagination limits](/developer-guides/unified-api/pagination) to reduce API calls * Running these synchronizations less frequently (e.g., once per day instead of every hour) * Consider using caching headers to avoid unnecessary fetches — see [Caching in Chift API](/developer-guides/unified-api/caching) *** ## Best practices ### 1. Always store timestamps in UTC Always work with UTC timestamps. Many timezone bugs come from mixing timezones. ```javascript theme={null} // ✅ Good const syncTime = new Date().toISOString(); // "2024-10-15T14:30:00.000Z" // ❌ Avoid const syncTime = new Date().toString(); // Contains local timezone info ``` ### 2. Be precise with timing Store the exact timestamp of when the synchronization completed, not rounded times. This ensures you don't miss edge-case records created at exact second boundaries. ### 3. Handle synchronization failures gracefully If a synchronization fails partway through, don't update your stored timestamp. Only update it after all records have been successfully processed and stored. ### 4. Monitor connector-specific behavior Some connectors have quirks: * Records might be updated within a brief window after creation * Deleted records might still appear for a short time with a `deleted_at` field * Timestamps might have millisecond precision on some systems and second precision on others Test your synchronization logic with your integrated connectors to understand their behavior. ### 5. Plan for the first synchronization carefully Initial synchronizations can be large. Consider: * Running them at off-peak times * Breaking them into smaller date ranges if the dataset is huge * Using `date_from` and `date_to` to limit the initial load period *** ## Troubleshooting ### No records returned, but I know data was updated Check: * Is `updated_after` supported for this endpoint? (Check the API reference) * Is your timestamp in UTC? * Are you using the correct format? (ISO 8601: `YYYY-MM-DDTHH:MM:SSZ`) * Is your stored timestamp actually *before* the data you expect? (Clocks can drift) ### Different results between connectors Connector behavior varies: * Some update `updated_at` when related objects change (e.g., marking an invoice as paid) * Others only update `updated_at` when the record itself changes * Some don't support `updated_at` at all Always test incremental synchronization with each connector you plan to support. ### Timestamps are drifting If your synchronizations keep missing recent data, you may have a clock drift issue between your system and Chift's servers. Monitor the `server_time` in API responses and adjust your next synchronization time accordingly. ### Memory issues with full synchronizations If you're doing manual comparison (for connectors without `updated_after` support) and hitting memory limits with large datasets: * Fetch and process records in smaller batches rather than loading everything at once * Use streaming if your API client supports it *** ## Related documentation * [Pagination limits](/developer-guides/unified-api/pagination) — Understanding page sizes and throughput * [Caching in Chift API](/developer-guides/unified-api/caching) — How cached responses work and when to bypass them * [Good practices for create and update requests](/developer-guides/unified-api/good-practice-create-and-update-requests) — Handling mutations reliably * [API reference](/api-reference) — See which endpoints support `updated_after` # Building with the Unified API Source: https://docs.chift.eu/developer-guides/unified-api/overview In the Unified API model, **your engineering team drives everything**: you call Chift's endpoints directly and read or write your end-users' financial data whenever your product needs to. Chift keeps the credentials working and gives you one consistent API shape across every connector. New to the terms *connector*, *consumer*, and *connection*? See [How it works](/developer-guides/how-it-works) first. Unified APIs ## Who does what * **You** create the consumer, create the connection, and hand the resulting activation link to your end-user. Afterwards you make the Unified API calls. * **Your end-user** opens that link and authorizes access to their software. Depending on the connector, they sign in via OAuth2, enter API credentials, or install the local agent. Some connectors then ask follow-up questions, such as which accounting folder or which POS location to use. * **Chift** stores and refreshes the credentials, and exposes the data through one Unified API shape regardless of which connector is behind it. Unified API model ## What you store Just the **`consumerid`**. Keep it on your end-user record: it is the key you pass to every Unified API call to say *whose* data you want. You do not need to store connection IDs for normal use. Chift resolves the right connection from the consumer and the API you are calling. ## The build path Exchange your API key for a bearer token. See [Authenticate with Chift API](/developer-guides/chift-authentication). Create a consumer, create a connection, and send your end-user the activation link. See [Create a connection](/developer-guides/unified-api/how-to-connect). Verify activation, then keep the connection healthy over time. See [Monitoring & updating connections](/developer-guides/monitor-connections). Read and write data for the consumer through the relevant Unified API. Browse endpoints in the [API reference](/api-reference). ## In this section The full flow, from consumer to active connection. Control where your end-user lands after activation. Confirm activation and keep connections alive. Two connectors serving the same Unified API. # Pagination limits Source: https://docs.chift.eu/developer-guides/unified-api/pagination Chift applies pagination limits for all endpoints returning multiple items, ensuring reliable performance and smooth synchronization with connectors. By default, pages contain **50 items**, but higher limits can be requested depending on account plan and usage needs. *** ### Default and maximum limits | Tier | Default limit | Maximum limit | Availability | | ------------ | ------------- | ------------- | ---------------------------------- | | Standard | 50 | 100 | Enabled by default | | Upon request | 50 | 500 | Available upon request | | Enterprise | 50 | 1000 | Available for Enterprise customers | *** ### Standard accounts By default, the pagination limit is set to **50 items per page**, with a **maximum of 100**.\ This behavior applies to all accounts and connectors unless explicitly changed. If no `limit` parameter is provided in the request, the default value of **50** is automatically applied. *** ### Upon request For specific use cases — such as heavy data synchronization or batch processing — the maximum pagination limit can be extended to **500 items per page**.\ This is available **upon request** for eligible accounts and is controlled by the Chift team via feature flags. **How it works** Pagination limits are managed internally and can be increased for selected accounts based on use case and data volume.\ This extended limit applies across all connectors where relevant. *** ### Enterprise tier Enterprise customers benefit from an increased pagination limit of up to **1000 items per page**.\ This higher limit is reserved for Enterprise-tier accounts. # Raw data & pass-through Source: https://docs.chift.eu/developer-guides/unified-api/raw-data Extending the Unified API when you need more control The Unified API covers most standard use cases.\ When it doesn’t, Chift provides two advanced escape hatches: * **Raw data**: access the native API responses used to build unified objects * **Pass-through**: call connector-specific endpoints directly These features allow you to go beyond the unified model while still benefiting from Chift’s authentication, routing, and connector maintenance. ## Raw data ### What it is The *Raw Data* feature exposes the native API calls and responses used internally by Chift to build unified data. You still receive the unified response, with an additional `raw_data` field containing everything fetched behind the scenes. ### When to use it * You need fields not exposed in the unified model * You want to understand or debug how unified data is built * You want to enrich unified objects with connector-specific fields ### How to use it Add the following header to your request: ```text theme={null} X-Chift-Raw-Data: true ``` For example, `/pos/customers` returns the unified data along with a `raw_data` field containing the endpoints called and their results. ```text theme={null} { "items": [ { "id": "168390", "first_name": "Henry", "last_name": "Michel", "name": "Henry Michel", "phone": null, "email": null, "created_on": "2016-01-13T10:05:10+01:00", "addresses": [], "loyalty": 0, "birthdate": null }, ... ], "page": 1, "total": 1005, "raw_data": { "customers?offset=9000&limit=1000": { "customers": [ { "id": 24909902 ... } ] } } } ``` When using the API Explorer in your Chift Platform, you have a checkbox to activate the "raw data" feature to test it out. ## Pass-through ### What it is Pass-through lets you call connector-specific API routes that are not exposed through the Unified API. Chift handles authentication, connection management and forwards your request to the connector.\ You directly interact with the connector’s native endpoint and response format. ### When to use it Use pass-through when: * The Unified API does not expose a required feature * The connector provides useful routes (e.g. promotions, reports, exports) * You need immediate access without waiting for unification If the endpoint can be unified, prefer the Unified API. ### How it works To call a connector's native endpoint, insert `forward` between the Unified API name and the endpoint path: ```http theme={null} GET /consumers/{consumerId}/{unified_api}/forward/{endpoint_path} ``` **Example** — retrieving the list of promotions from a POS connector: ```http theme={null} GET /consumers/{consumerId}/pos/forward/promotions ``` Chift handles authentication and forwards the request to the connector's native API. All query parameters and request options are passed through as-is. This is not yet implemented on all connectors (and is as well not supported for all connectors). Please contact support or your CSM if needed. # Webhooks Source: https://docs.chift.eu/developer-guides/webhooks ### Summary Use Chift's webhooks to build custom applications that react to specific events from the platform and the unified APIs. #### How can you manage your webhooks? * Manage webhooks through the UI in your account settings * Manage webhooks through the API #### Technical specifications When a specific event occurs, Chift sends a POST HTTP request to the webhook's URL. The request contains a JSON payload with at least these mandatory attributes: * `accountid`: guid of your Chift's account * `event`: name of the event * `consumerid`: guid of the consumer on which the event occurred * `created`: timestamp (in sec) of the webhook event The header also contains the following [encrypted Chift Signature](#x-chift-signature): * `X-Chift-Signature`: encrypted signature of your body payload #### List of events Chift can emit the following events, grouped by domain. For the *connection events*, also see the [Connection lifecycle](/developer-guides/monitor-connections#connection-lifecycle) section to understand when each one is sent. Every webhook body includes `accountid`,`event`,`consumerid`,`created`, as described in [Technical specifications](#technical-specifications). The payloads below show only the event-specific fields added **in addition to** those. When a new consumer connection is created. You receive this event only when the connection is created successfully.

Additional fields on top of the common payload for this event: * `connectionid:` guid of the connection on which the event occurred * `status`: active/inactive
When a consumer connection is updated. * `connectionid`: guid of the connection on which the event occurred * `status`: active/inactive When a consumer connection is deleted. * `connectionid`: guid of the connection on which the event occurred * `status`: active/inactive When a local agent is correctly set up. * `connectionid`: guid of the connection on which the event occurred When a local agent has not sent a ping in the last 15 minutes. * `connectionid`: guid of the connection on which the event occurred
When a flow is activated for a specific consumer. Additional fields on top of the common payload for this event: * `flowid`: guid of the flow on which the event occurred * `syncid`: guid of the sync on which the event occurred When a flow is deactivated for a specific consumer. Additional fields on top of the common payload for this event: * `flowid`: guid of the flow on which the event occurred * `syncid`: guid of the sync on which the event occurred When flow settings are updated for a specific consumer. Additional fields on top of the common payload for this event: * `flowid`: guid of the flow on which the event occurred * `syncid`: guid of the sync on which the event occurred When a flow finishes executing (one event per consumer). Additional fields on top of the common payload for this event: * `flowid`: guid of the flow on which the event occurred * `syncid`: guid of the sync on which the event occurred * `status`: success/error * `executionid`: guid of the execution of the consumer flow * `parentexecutionid`: guid of the execution of the parent flow When a data layer refresh starts for a consumer (one event per consumer). Additional fields on top of the common payload for this event: * `connectionid`: guid of the connection being refreshed * `api`: source API being refreshed (e.g. Accounting) * `scope`: the scope of the source covered by the refresh — only sent for data layer events; structure depends on the API When a data layer refresh finishes for a consumer, whether it succeeded or failed (one event per consumer). Additional fields on top of the common payload for this event: * `connectionid`: guid of the connection that was refreshed * `api`: source API that was refreshed (e.g. Accounting) * `scope`: the scope of the source covered by the refresh — only sent for data layer events; structure depends on the API * `status`: success/error When records are created or updated during a data layer refresh. Sent once per folder processed, and only when something changed. The `changed` array lists the data layer resources that were affected (by their table name). It does not carry record ids — fetch the resource to retrieve the latest data. Additional fields on top of the common payload for this event: * `connectionid`: guid of the accounting connection that was refreshed * `changed`: array of affected data layer resource table names (e.g. `["accounting_invoices", "accounting_partners"]`) When records are deleted during a data layer refresh. Sent once per folder processed, and only when something was deleted. The `deletes` object maps each affected data layer resource (by its table name) to the ids of the records that were removed. Unlike `data_changed`, deletions carry their ids, since a removed record can no longer be retrieved by fetching the resource. Additional fields on top of the common payload for this event: * `connectionid`: guid of the accounting connection that was refreshed * `deletes`: object mapping each affected data layer resource (by its table name) to the ids of the removed records (e.g. `{"accounting_partners": ["MYPARTNERID", "MYPARTNERID2"]}`) When a new consumer issue is raised. Additional fields on top of the common payload for this event: * `issue_id`: guid of the consumer issue * `connectionid`: guid of the connection on which the issue occurred * `syncid`: guid of the sync on which the issue occurred (optional) * `error_code`: error code of the issue * `issue_status`: status of the issue * `message`: error message describing the issue * `context`: additional context information When there is a new occurrence of an existing consumer issue. Additional fields on top of the common payload for this event: * `issue_id`: guid of the consumer issue * `connectionid`: guid of the connection on which the issue occurred * `syncid`: guid of the sync on which the issue occurred (optional) * `error_code`: error code of the issue * `issue_status`: status of the issue * `message`: error message describing the issue * `context`: additional context information * `occurrences`: number of times this issue has occurred When a consumer issue is closed automatically. Additional fields on top of the common payload for this event: * `issue_id`: guid of the consumer issue * `connectionid`: guid of the connection on which the issue occurred * `syncid`: guid of the sync on which the issue occurred (optional) * `error_code`: error code of the issue * `issue_status`: auto\_closed When an order is completed. Additional fields on top of the common payload for this event: * `order_id`: guid of the order on which the event occurred * `device_id`: guid of the device on which the order was completed (optional) * `customer_id`: guid of the customer that has made the order (optional) * `location_id`: guid of the location on which the order was completed * `updated_at`: time of completion When the status of an order is updated. Additional fields on top of the common payload for this event: * `order_id`: guid of the order on which the event occurred * `device_id`: guid of the device on which the order was completed (optional) * `customer_id`: guid of the customer that has made the order (optional) * `location_id`: guid of the location on which the order was completed * `updated_at`: time of completion
#### X-Chift-Signature Use the `X-Chift-Signature` attribute to verify that incoming calls on your webhook endpoint come from Chift. Chift generates the `X-Chift-Signature` from the signing secret that you can optionally add when you create or update a webhook. It uses the HMAC authentication method, which relies on two keys: the signing secret that only you know, and the request body. Most programming languages support HMAC hashes. For example, in Node.js: ```javascript theme={null} const hash = crypto .createHmac("sha256", encryption.decrypt(SIGNING_SECRET).toString()) .update(JSON.stringify(REQUEST_BODY), "utf-8") .digest("hex"); ``` For example, in Python: ```python theme={null} import hmac import hashlib import json json_data = json.dumps(REQUEST_BODY, separators=(',', ':')) h = hmac.new(SIGNING_SECRET.encode(), json_data.encode(), hashlib.sha256) hash = h.hexdigest() ``` By computing the hash on your endpoint, you can compare it with the `X-Chift-Signature` header attribute to confirm that the request originated from Chift. # Glossary Source: https://docs.chift.eu/docs/introduction/glossary Short definitions of the terms used throughout this documentation. For how these fit together when you build, see [How it works](/developer-guides/how-it-works). ### Connector A piece of software Chift can talk to — Odoo, Sage, Shopify, Lightspeed. You choose which connectors to activate for your customers in [your account configuration](/back-office/getting-started/activate-connector). Chift's API paths and fields call these *integrations*; the two words mean the same thing. ### Consumer One of your customers, as Chift knows them. Identified by a uuid (`consumerid`) that you pass in almost every API request to say whose data you want. Manage them [via the API](/api-reference/endpoints/consumers/create-new-consumer) or [in the platform](/back-office/getting-started/create-consumer). ### Connection The link between one consumer and one connector, holding that customer's credentials and configuration — for example one customer's Odoo credentials. A consumer can have several connections, but only one per connector. See [Create a connection](/developer-guides/unified-api/how-to-connect). ### Post-connection A follow-up question asked after credentials are accepted, such as which accounting folder or POS location to use. See [Connection lifecycle](/developer-guides/monitor-connections#connection-lifecycle). ### Unified API One consistent API shape covering many connectors in the same category. Chift has seven: Accounting, Invoicing, POS, E-commerce, Payment, PMS, and Banking. See [Unified APIs overview](/unified-apis/overview). ### Sync A pre-built synchronisation between two Chift APIs, built and run by Chift instead of by your engineering team. A sync contains one or more **flows**, each triggered by an event or a timer (e.g. nightly at 4 AM), running a process such as "get invoices and inject them into accounting" for every consumer linked to the sync. See [Syncs](/syncs). ### Mapping A correspondence your end-user confirms during onboarding to a sync — for example matching tax rates between their POS and their accounting software. # Welcome Source: https://docs.chift.eu/docs/introduction/welcome Explore our **API Reference**, **Developer Guides**, **Connector list**, and the **Platform** to quickly integrate and leverage our **Unified APIs** across **Accounting**, **POS**, **eCommerce**, **Invoicing**, **Payment**, **Banking** and **PMS**. ## Get started ✨ * **🖥 Platform Onboarding** – [Explore first steps in Chift’s platform](/back-office) * **⚙️ Implementation Guide** – [Get started with your Chift integration](/developer-guides) ## Explore our docs 📚 Discover our unified APIs, their data types, and key concepts. Learn how syncs work, from process flow to available options. Browse the complete list of connectors with coverage, overviews, and key details. Deep dive into Chift’s full API reference and endpoint documentation. # eCommerce sync Source: https://docs.chift.eu/syncs/ecommerce-sync This sync will allow you to sync ecommerce orders and payments with accounting software. Ecommerce sync ### Default scope: This integration aims to automate e-commerce site accounting to replace manual exports. This integration flow will allow sales entries to be imported into accounting.\ The integration doesn't retrieve all invoices individually but creates aggregated entries to report revenue and VAT in accounting. The integration supports the management of: * different payment methods * different product categories * different delivery countries * different VAT rates * gift vouchers Note that this is the default scope, based on your requirements this can be modified. ### Mappings Mappings are the way to map the data from the ecommerce software to the accounting software. Note that these are the default mappings, based on your requirements these can be modified. This step allows you to specify the accounting journal in which to create accounting entries generated based on sales from your e-commerce software. This step allows you to connect your eCommerce tool through API key, credentials or OAuth2. This step allows you to connect your accounting tool through API key, credentials or OAuth2. This step allows you to specify whether entries are made in a sales or purchase journal.

*Reproduce this step by using the following API call(s) :*
GET journals
This step allows you to choose the accounting account for each payment method (credit card, cash, etc.) to be used as debit in the generated accounting entries.\ If no match is found for a payment method (for example: a new payment method is added and not configured in the synchronization settings), then account X is used as the default account.

*Reproduce this step by using the following API call(s) :*
GET all payment methods
GET chart of accounts
*(Filter on class 4 and 5 accounts)*
Note that this is not for all clients like this. For example, for Inqom (software where this concept of VAT codes doesn't exist), it's not VAT codes that we select on the right but directly the VAT accounting account to use in the entries. Currently, only Pennylane works as shown here Choose the country that corresponds to the VAT rates detected in the e-commerce software. This step will ensure the correct VAT codes are used in the generated entries.

*Reproduce this step by using the following API call(s) :*
GET all tax rates
GET chart of accounts
*(Filter on class 4 accounts)*
This step allows you to define the accounting accounts to use for recording revenue in accounting. The amounts excluding VAT can be allocated in two different ways: * **via product categories**: the accounting account is determined based on the category linked to the sold product * **via the order's delivery country**: the accounting account is determined based on the order's delivery country. If the country is not defined in the delivery address, then the billing address is considered If the accounting account cannot be determined because the product isn't linked to any category or the order isn't linked to any country, then the accounting account indicated as the default sales account (excluding VAT) in step 7 (default values) of the integration configuration is used.

*Reproduce this step by using the following API call(s) :*
GET all products categories
*(Filter with “only\_parents” = “True”)*
GET chart of accounts
*(Filter on class 7 accounts)*
Choose accounting accounts to record specific cases. In this step, you can also indicate the default sales account mentioned in step 6 above.

*Reproduce this step by using the following API call(s) :*
GET all products categories
*(Filter with “only\_parents” = “True”)*
GET chart of accounts
*(Filter on class 4, 5, 6 and 7 accounts)*
When activating synchronization, you can choose to account for the sale of gift vouchers. If this option is activated, the revenue (amount excluding VAT) from gift voucher sales will be recorded in the indicated account. If this option is not activated, gift voucher sales will not be included in the generated accounting entries. Note that this option is separate from the processing of gift vouchers as a payment method, which will always be taken into account for all orders. This refers to the sale of a gift voucher that can then be used as a payment method in a subsequent order.
*Reproduce this step by using the following API call(s) :*
GET chart of accounts
*(Filter on class 4, 5, 6 and 7 accounts)*
This step allows you to specify whether entries are made in an account for discounts, rebates and debates ; it is an optional step.

*Reproduce this step by using the following API call(s) :*
GET chart of accounts
*(Filter on class 6 and 7 accounts)*
### Configuration 1. Synchronization Trigger Orders can be synchronized in 2 distinct ways: * Once per day * Once per month 2. From what date do we retrieve orders? The synchronization start date determines from when orders will be integrated into accounting. Only orders created from this date will be synchronized.\ It's important to distinguish between Shopify and other e-commerce platforms: * Shopify: a change made to an order (for example, adding a product) created before this date will be included in the synchronization only if the order elements are recorded at the date of each modification. This is detailed in the question "Do you want to record changes to an already synchronized order at the date of modification?" * Other e-commerce: a change made to an order (for example, adding a product) created before this date will NOT be included in the synchronization. This is because e-commerce platform APIs don't provide the creation date for each order element. It's therefore impossible to determine what was modified if the order wasn't previously synchronized.\ However, refunds made on an order created before the synchronization start date will be synchronized at the refund date, provided it's after the synchronization start date. 3. Should we group orders and refunds? This step determines if and how to group orders and refunds. There are three options: * No, create an entry per order and refund → a specific entry will be created in accounting for each order and refund. * Yes, create one entry per day → all orders from the same day will be grouped into a single accounting entry. Similarly, all refunds from the same day will be grouped into a single accounting entry. * Yes, create one entry per month → all orders from the same month will be grouped into a single accounting entry. Similarly, all refunds from the same month will be grouped into a single accounting entry. 4. When do you want to synchronize orders? This step determines the status from which orders are eligible for synchronization and the date at which order elements are recorded. There are five options: * as soon as the order is confirmed, all order elements are recorded at the order creation date. * as soon as the order is confirmed, each order element is recorded at the date when the element was added to the order. * as soon as the order is delivered, all order elements are recorded at the order creation date. * as soon as the order is delivered, each order element is recorded at the date when the element was added to the order. * as soon as the order is delivered, all order elements are recorded at the order delivery date. An order is considered confirmed according to the following criteria: * Shopify: All orders that aren't drafts. * WooCommerce: from payment. * Prestashop: from payment. For Shopify, the information about the date each element was added is 100% accurate. However, for other e-commerce platforms, we rely on the date of the last order modification. 5. Which address do you want to use to define the order country? This step determines the order country. There are two options: * delivery address * billing address 6. Do you want to refund cancelled orders that haven't been refunded? Do you want to create a refund for cancelled orders that don't yet have a refund in the e-commerce software? This option allows generating an accounting "refund" entry for cancelled orders even if there's no refund in e-commerce. Here are the possible options: * No (default value): refunds are only created for cancelled orders if they already have refunds in e-commerce * Yes, but only for previously synchronized orders: refunds are created only if the order was created after the start of synchronization * Yes, all orders: refunds are created for all cancelled orders, regardless of their creation date 7. Do you have orders that should NOT be synchronized? If so, please indicate the tag(s) (separated by commas) to identify these orders. This option allows you to associate a tag with orders you don't want to include in the synchronization.\ For example: If you want to create internal orders to track stock directly in your e-commerce store You can then associate a tag with these orders you want to exclude from synchronization. A concrete example of a tag could be "StockTracking" for orders used to track stock movements in your e-commerce store for internal purposes. If you want to create multiple tags, the answer to this question would be: "StockTracking, Stock Management, AnyTagYouWant". Any order associated with one of these three tags will be ignored during synchronization execution. If this doesn't apply, you can leave this option empty. For WooCommerce, it's necessary to define a custom field. For this, in the custom fields section, you need to create an "order\_tags" field and enter as values the different tags you want to associate with an order. These tags that you will have created in the order will then be used to filter or not filter an order during synchronization. # Embedded Source: https://docs.chift.eu/syncs/embedded Through the embedded model, you will be able to choose how and when you want to: * Expose the configuration of the sync to your end-users * Trigger the sync from your app * Manage the executions of the sync from your app * Show logs to your end-users in your app You decide how you want to integrate the sync in your app.\ In the "embedded" model, you will have to do a minimum development on your side to manage consumers and connections, as well as sharing the activation of syncs to your end-users. You will call our APIs to obtain the URL that you can share with your end-users (protected page by a token) This gives you the possibility to choose how and where to do it in your app. # How can syncs be exposed to end-users Source: https://docs.chift.eu/syncs/expose-overview We have developed different ways to expose syncs to your end-users.\ The choice of the method depends on your needs and constraints.\ From something fully embedded in your app to something that is listed in our marketplace, we have you covered. Syncs can be exposed to end-users in different ways: * [Embedded](/syncs/embedded) * [Pre-oauth2 sync](/syncs/pre-oauth2-sync) * [Marketplace](/syncs/marketplace) The differences are highlighted below and are explained in more detail in the dedicated pages. | Property | Embedded | Pre-oauth2 sync | Marketplace | | ------------------------------- | -------- | --------------- | ----------- | | Requires dev on your side | ++ | + | + | | Embedded in your app | +++ | ++ | + | | White-label | +++ | ++ | + | | End-users can manage consumers | + | + | +++ | | End-users can manage executions | + | + | +++ | # How does it work Source: https://docs.chift.eu/syncs/how-does-it-work Syncs are powered by connecting our Unified APIs to your software. We have a set of [pre-built syncs](/syncs/overview#explore-our-ready-to-use-syncs) that you can use as a starting point, but we can also build custom syncs for you depending on your needs.\ Together with you, we define the data that needs to be synced, the frequency of the syncs and the triggers that will start the syncs.\ The syncs are fully managed by us, so you don't have to worry about the underlying infrastructure. #### Requirements * You have an API for your software * You want to connect your software to one of our [Unified APIs](/unified-apis/overview) #### How * We define the scope together * We build the sync for you * We define the trigger based on your requirements (e.g. event-based or timer-based) * We define how you want to expose the sync to your end-users (see [overview](/syncs/expose-overview)) #### What can you do? Based on your requirements, you can use our APIs for which you will have different endpoints that will give you the full control over the sync.\ Next to the same routes to manage consumers and connections as for the Unified APIs, you will have dedicated endpoints for the syncs. For the activation: * Share the configuration page of a sync for a consumer (see [share sync](/api-reference/endpoints/consumers/retrieve-the-url-of-a-sync-for-a-specific-consumer)) * Get the status of a sync for a consumer (see [get status of a sync](/api-reference/endpoints/consumers/get-sync-information-for-one-consumer)) * Activate the sync for a consumer (see [activate sync](/api-reference/endpoints/syncs/enable-a-flow-for-a-specific-consumer)) * Update settings of the sync for a consumer (see [update sync settings](/api-reference/endpoints/syncs/update-flow-settings-for-a-specific-consumer)) For the execution status: * Get list of executions (see [get executions](/api-reference/endpoints/consumers/get-executions-information-for-one-consumerflowsync)) * Get information about one execution (see [get executions](/api-reference/endpoints/syncs/get-execution-startend-timestamp)) * Get data of executions (see [get data of executions](/api-reference/endpoints/consumers/get-executions-information-for-one-consumerflowsync)) Trigger a sync: * Trigger a sync (see [trigger a sync](/api-reference/endpoints/syncs/send-a-custom-event-for-a-specific-flow)) or [manually through the platform](/syncs/self-service) # Invoices sync Source: https://docs.chift.eu/syncs/invoices-sync This sync will allow you to sync invoices from invoicing software to accounting software. Invoices sync ### Default scope: This integration sync will allow: * automatic synchronization of **sales and/or purchase invoices (with attachment)** from an invoicing software to an accounting tool. * synchronization of **customers and suppliers (third parties):** * if the third party doesn't yet exist in accounting, the flow will try to find a match based on the following criteria: 1. auxiliary accounting account vs. auxiliary account entered in the invoicing software 2. VAT number 3. company/SIRET number 4. auxiliary accounting account vs. customer/supplier name * if no match is found, then a new customer/supplier is automatically created in the accounting system Note that this is the default scope, based on your requirements this can be modified. ### Mappings Mappings are the way to map the data from the invoicing software to the accounting software. Note that these are the default mappings, based on your requirements these can be modified. This step allows you to connect your invoicing tool through API key, credentials or OAuth2. This step allows you to connect your accounting tool through API key, credentials or OAuth2. This step allows you to specify the VAT code to use in accounting for each sales VAT rate existing in the invoicing software.

*Reproduce this step by using the following API call(s) :*
GET folders
GET vat codes
GET retrieve all taxes
This step allows you to specify the VAT code to use in accounting for each purchase VAT rate existing in the invoicing software.

*Reproduce this step by using the following API call(s) :*
GET vat codes
GET retrieve all taxes
Select the VAT codes to use for possible rounding differences.

*Reproduce this step by using the following API call(s) :*
GET vat codes
This step allows you to specify whether entries are made in a sales or purchase journal.

*Reproduce this step by using the following API call(s) :*
GET journals
1. Sales Account (products): This step allows you to specify the accounting account to use in sales invoice lines if the information is missing in the invoicing software OR if the account mentioned in the invoicing software doesn't exist or is not active in accounting. 2. Purchase Account (expenses): This step allows you to specify the accounting account to use in purchase invoice lines if the information is missing in the invoicing software OR if the account mentioned in the invoicing software doesn't exist or is not active in accounting. 3. Customer Collective Account: This step allows you to specify the accounting account that serves as the customer collective in accounting. Generally, this is account 411 4. Supplier Collective Account: This step allows you to specify the accounting account that serves as the supplier collective in accounting. Generally, this is account 401 5. Account to use for possible credit rounding: In some invoicing software, the sum of lines doesn't always equal the invoice total due to VAT rounding. If the sum of lines is less than the invoice total, then a line is added to the invoice to balance this in accounting. Generally, this is account 758 6. Account to use for possible debit rounding: In some invoicing software, the sum of lines doesn't always equal the invoice total due to VAT rounding. If the sum of lines is greater than the invoice total, then a line is added to the invoice to balance this in accounting. Generally, this is account 658

*Reproduce this step by using the following API call(s) :*
GET chart of accounts
*(Filter on class 4, 6 and 7 accounts)*
This step allows you to specify whether discounts need to be specified in a separate account for discounts, rebates and debates ; it is an optional step. If not activated the discounted amount is directly deducted from the product/charges account.

*Reproduce this step by using the following API call(s) :*
GET chart of accounts
*(Filter on class 6 and 7 accounts)*
### Configuration 1. Synchronization Start Date: choice of the date from which invoices will be synchronized. 💡Synchronization starts automatically each night. 2. Do you want to create entries as draft/pending?\ This option allows creation of "pending" accounting entries in the accounting software. This means the accountant must validate each entry before it is recorded. Some accountants prefer this approach for better control. Note that this is not supported by all accounting tools. 3. Do you want to synchronize invoices without attachment?\ Do you want invoices to be synchronized to accounting when the PDF/attachment is missing in the invoicing software? If you select "no", then sales and purchase invoices without PDF/attachment will not be synchronized until the PDF/attachment is provided. 4. What do you want to synchronize?\ You can specify the integration scope: purchase and sales invoices, sales invoices only, or purchase invoices only. 5. Label Settings\ This step allows you to define how accounting entry labels are composed. An accounting label is a description associated with an accounting entry that helps clarify each accounting entry. Four options are available: * The line linked to a customer/supplier account has the customer/supplier name as label / Other lines have the description from invoicing software as label * Customer/supplier name on all lines * Customer/supplier name + description of invoice lines on all lines * Customer/supplier name + invoice number on all lines ### Troubleshooting | Error Code | Error description | Resolution | | ---------------------------------------------------- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ERROR\_SYNC\_INVOICE\_ACCOUNT\_NUMBER\_NOT\_FOUND | The account number doesn't exist in the accounting system. | The account number of one of the items in the invoice is not found in the accounting system. See [appendix 1](#appendix-1) for more information. | | ERROR\_SYNC\_INVOICE\_ACCOUNT\_NUMBER\_NOT\_ACTIVE | The account number is not active in the accounting system. | The account number of one of the items in the invoice is not active in the accounting system. See [appendix 1](#appendix-1) for more information. | | ERROR\_SYNC\_INVOICE\_PARTNER\_NOT\_FOUND | The partner doesn't exist in the accounting system. | The client/supplier referenced in the invoice is not found in the accounting system. See [appendix 2](#appendix-2) for more information. | | ERROR\_SYNC\_INVOICE\_AMOUNT\_VALIDATION | The invoice amounts (totals, taxes or untaxed amounts) are not valid. | Please check the invoice and evaluate why the totals are not valid. If the amounts are correct in the invoicing tool, please contact Chift's support. | | ERROR\_SYNC\_INVOICE\_CONTACT\_NOT\_FOUND | The contact doesn't exist in the invoicing tool. | The contact referenced on the invoice is not found in the invoicing tool. Please check the invoice and evaluate why the contact is not found. If the contact exists in the invoicing tool, please contact Chift's support. | | ERROR\_SYNC\_INVOICE\_JOURNAL\_NOT\_LINKED | The invoice is not linked to a journal in the invoicing tool. | The invoice is not linked to a journal in the invoicing tool. Please check the invoice and evaluate why the journal is not linked. Make sure that every invoice has a journal linked. If the journal is linked in the invoicing tool, please contact Chift's support. | | ERROR\_SYNC\_INVOICE\_LINE\_VALIDATION | The invoice line is not valid. | The invoice line is not valid. There is a missing tax code or tax rate in one of the invoice lines. Please check the invoice and evaluate why the invoice line is not valid. If the invoice line is valid in the invoicing tool, please contact Chift's support. | | ERROR\_SYNC\_INVOICE\_MAPPING\_TAX\_RATE\_NOT\_FOUND | The tax rate of one of the invoices is not mapped in the sync. | The tax rate is not mapped in the sync. Please configure the mapping of the sync. | | ERROR\_SYNC\_INVOICE\_PARTNER\_VALIDATION | The partner of one of the invoices is not configured. | It's impossible to sync the invoice because it's missing a partner\_id. If the partner does exist on the invoice, please contact Chift's support. | | ERROR\_SYNC\_INVOICE\_PDF | There is an issue while retrieving the pdf of the invoice. | The invoice has no PDF/attachment or there is an issue while retrieving the PDF/attachment of the invoice from the invoicing software. Please check the invoice and evaluate why the PDF/attachment is missing / not valid. If the PDF/attachment is present in the invoicing tool, please contact Chift's support. | | ERROR\_SYNC\_INVOICE\_MAPPING\_JOURNAL\_NOT\_FOUND | The journal of one of the invoices is not mapped in the sync. | The journal is not mapped in the sync. Please configure the mapping of the sync. Note that this is only applicable when journals from the invoicing software are mapped with accounting journals | ### Appendix #### Appendix 1: The account number doesn't exist or is not active in the accounting system. The account number of one of the items in the invoice is not found or is not active in the accounting system. If you have this error, it means that the account number used to create the invoice does not exist or is not active in the accounting system. The sync is working as follows: 1. If available, we use the account number specified in the invoicing tool for the items of the invoice. 2. We try to create the invoice with those account numbers in the accounting system. 3. If the account number does not exist or is not active in the accounting system, we retry with the default account number specified in the mapping (Default account number for products & expenses). 4. If the account number still does not exist or is not active in the accounting system, we raise an error. The invoice is not created in the accounting system. This issue can happen in 2 cases: * the account number specified on the invoicing software doesn't exist or is not active in the accounting tool * the default account number specified in the mapping doesn't exist anymore in the accounting tool OR is not active in the accounting tool What you can do: * Use a correct and valid account number in the invoicing tool for the items of the invoice or create and activate the account number in the accounting system. * Make sure the default account number in the mapping does exist or create the account number in the accounting system. #### Appendix 2: The partner doesn't exist in the accounting system. The client/supplier referenced in the invoice is not found in the accounting system. If you have this error, it means that the client/supplier referenced in the invoice was created in the accounting system but does not exist anymore. This can happen if the accountant has deleted the client/supplier in the accounting system. What you can do: * Check if the client/supplier exists in the accounting system. * If the client/supplier does not exist, create a new one in the accounting system. * Contact Chift's support to re-sync the client/supplier in the invoicing tool. # Ledger Preview Source: https://docs.chift.eu/syncs/ledger-preview The **Preview** feature for ledger entries allows you to **safely test and validate synchronization flows** without committing any actual ledger entries to the target accounting system. It acts like a sandbox mode for data synchronization, showing exactly which ledger entries would be created **without writing any real data**. For now, only Point of Sale to Accounting (*Export des ventes vers la comptabilité - Par catégorie OU Taux de TVA*) is supported. ## Purpose & business value * **Risk reduction:** Preview data before activating a flow, avoiding duplicates or errors. * **Confidence building:** See exactly which ledger entries would be created. * **Debugging & compliance:** Access execution logs to troubleshoot issues and verify accounting accuracy. * **Time & support savings:** Reduces failed integrations and support tickets. ## How it works ### 1. Initiate preview Start a preview from the flow configuration modal by clicking **Aperçu des écritures comptables**. Flow configuration modal with preview button ### 2. Select date range Choose a date range for the preview. Only historical data can be selected (max 1 year). Date range selection dialog ### 3. System processing The preview runs asynchronously, generating simulated ledger entries. You will be notified by email when the preview is ready. Preview processing status ### 4. Email notification Once the preview finishes, the system sends an email with a link to view the results or errors. Email notification with preview results link ### 5. Review results Access the preview results through two tabs: **Ledger tab:** Displays formatted journal entries (debits, credits, accounts, descriptions). Ledger tab showing journal entries **Logs tab:** Shows execution details, errors, and debug information. Logs tab showing execution details ### 6. Decision Based on the preview results, you can activate the flow, adjust configurations, or run another preview. ## Feature highlights ### Status tracking The system tracks preview status throughout the process: | Status | Description | | ----------- | ------------------------------------------------- | | **pending** | Preview is running | | **ready** | Preview completed successfully, results available | | **viewed** | User has accessed the preview results | | **failed** | Preview encountered an error | ### Additional features * **Secure access:** Each preview is scoped to the requesting user and time-limited. * **Email notifications:** Users are notified when a preview completes or fails, with links to view results or errors. * **Ledger entry validation:** Verify that ledger entries are balanced (debits = credits) before committing. Preview result links expire after 7 days. # Marketplace Source: https://docs.chift.eu/syncs/marketplace In the marketplace model, we expose your syncs through a full marketplace where your users will authenticate and create an account in Chift. The authentication process is very smooth and done by a magic link to avoid any friction. On their first login, they will have to create an account by providing the name of their company. They will be able to: * Invite other users to their account * Activate one or more integrations for one or multiple consumers (organizations or entities) * Manage their integrations (configure, deactivate or delete) * View the logs of the executions of the syncs and detect errors if any Through this model, you won't have to develop anything on your side and you will provide a seamless experience to your end-users. This way of working is very appreciated by accountants as they can collaborate with their clients in a seamless and automated way. # Overview Source: https://docs.chift.eu/syncs/overview Syncs can be used to create easy and scalable automations between two or more of Chift's unified APIs.\ It can for example be used to create an automation workflow between the Invoicing API (or one specific connector inside the Invoicing API) and the Accounting API (or one specific connector inside the Accounting API).\ Through the sync, the end-users can select their invoicing and accounting software and can activate the workflow(s).\ As you can imagine, it creates a multitude of automation opportunities without you having to worry about connectivity, monitoring, scalability, maintenance, etc. Overview Main features and benefits offered by our Unified APIs: * Full to semi-embedded & native experience with white labeling for your customers * You don't need to develop anything; we do everything for you. No roadmap issues anymore. * Connectors can be activated in one-click from your account (see [activate connector](/back-office/getting-started/activate-connector)) * Advanced user onboarding and support (see [user onboarding](/back-office/user-onboarding/overview) and [support](/back-office/support/overview)) * Advanced features to scale your integrations (see our documentation) * Different ways to trigger the sync (event-based or timer-based) * [Different ways to expose syncs to end-users](/syncs/expose-overview) ## Explore our ready-to-use syncs Explore our Invoices Sync Explore our E-commerce Sync Explore our POS Sync Explore our PMS Sync Explore our Payments Sync ## Explore other possibilities Through our Unified APIs, we can also create other types of syncs for you, e.g.: * Sync of expenses to accounting * Sync of transactions to accounting * Sync of pos data to ERP * ... Do not hesitate to [contact us](https://chift.eu/contact) if you need help with that. # Payment sync Source: https://docs.chift.eu/syncs/payment-sync This sync will allow you to sync payments from payment software (e.g. Mollie, Stripe, Paypal, etc.) with accounting software. Default scope: * Retrieve transactions by balance (each balance is linked to transactions in a specific currency). Transactions include: * Payments, including the fees charged by the payment provider * Refunds, including the fees charged by the payment provider * Payouts (outgoing transfers to the merchant's bank account) * These transactions can be synchronised with the accounting system in 2 different ways: * One accounting entry per transaction * One accounting entry grouped by transaction type and period The sync can be triggered daily, weekly or monthly. ### Configuration of the sync & mappings Mappings are the way to map the data from the payment software to the accounting software. This step allows you to connect your payment tool through API key, credentials or OAuth2. This step allows you to connect your accounting tool through API key, credentials or OAuth2. This step allows you to specify which balances you want to synchronise.

*Reproduce this step by using the following API call(s) :*
GET Retrieve all balances
Here you are going to select your accounting journals for the synchronisation.

*Reproduce this step by using the following API call(s) :*
GET journals
Here you are going to select default accounting accounts (client account, bank account, expense account, ...) for the synchronisation.

*Reproduce this step by using the following API call(s) :*
GET chart of accounts
### Configuration 1. This final step allows you to specify the synchronization start date: choice of the date from which payments will be synchronized. Synchronization starts automatically but you can choose: * Each night (at 1 AM) * Each Monday (at 1 AM) * Each first day of the month (at 1 AM) 2. Choose between one aggregated entry per period or one entry per invoice # PMS sync Source: https://docs.chift.eu/syncs/pms-sync This sync will allow you to sync pms orders and payments with accounting software. PMS sync ### Default scope: This integration sync will automate PMS accounting (also called Property Management System), making manual exports unnecessary. The integration will import sales and payments entries into accounting on the frequency defined in the configuration (daily, weekly or monthly). The integration supports management of different payment methods, product categories and/or VAT rates. The accounting entries will be created in the accounting journal specified in the configuration. You can choose whether to have: * a single entry per period * a single entry per invoice Specific period will only be imported if the period is closed (max 7 days or defined in the configuration of the software) ### Mappings Mappings are the way to map the data from the pms software to the accounting software. This step allows you to connect your accounting tool through API key, credentials or OAuth2. This step allows you to connect your property management system tool through API key, credentials or OAuth2. This step allows you to specify the accounting journal in which to create accounting entries

*Reproduce this step by using the following API call(s) :*
GET journals
* When you create one entry per period, this will be the client account you will use to balance your accounting entries. * When you create one entry per invoice, this will be the default client account you will use for your invoices if the account is not specified in the client's invoice (configuration to be done in the PMS software).

*Reproduce this step by using the following API call(s) :*
GET chart of accounts
*(Filter on class 4 accounts)*
This step allows you to choose the accounting account for each payment method (credit card, cash, etc.)

*Reproduce this step by using the following API call(s) :*
GET Payment methods GET chart of accounts
*(Filter on class 4 and 5 accounts)*
This step allows you to define how revenue is classified.\ You have to select an accounting account next to each accounting category.

*Reproduce this step by using the following API call(s) :*
GET Accounting categories GET chart of accounts
*(Filter on class 4 and 7 accounts)*
### Configuration 1. This final step allows you to specify the synchronization start date: choice of the date from which Z tickets will be synchronized. Synchronization starts automatically each night (at 6 AM). 2. Choose between one aggregated entry per period or one entry per invoice # POS sync Source: https://docs.chift.eu/syncs/pos-sync This sync will allow you to sync pos orders and payments with accounting software. POS sync ### Default scope: This integration sync will automate cash register accounting (also called Point of Sale or POS), making manual exports unnecessary. The integration will import daily sales and payments entries into accounting (Z ticket or cash register Z report). The integration supports management of different payment methods, product categories and/or VAT rates. The integration also supports management of tips and complimentary items. This is the default scope. Based on your requirements, it can be modified. ### Mappings Mappings define how data from the POS software maps to the accounting software. These are the default mappings. Based on your requirements, they can be modified. This step allows you to connect your accounting tool through API key, credentials or OAuth2. This step allows you to connect your POS software through API key, credentials or OAuth2. This step allows you to specify the accounting journal in which to create closing entries

*Reproduce this step by using the following API call(s) :*
GET journals
This step allows you to choose the accounting account for each payment method (credit card, cash, etc.)\ If no match is found for a payment method (for example: a new payment method is added and not configured in the synchronization configuration), then account X is used.

*Reproduce this step by using the following API call(s) :*
GET payment methods
GET chart of accounts
*(Filter on class 4 and 5 accounts)*
This step allows you to define how revenue is classified, the amounts excluding VAT can be allocated in 2 different ways: * By product categories: the accounting account is determined based on the category linked to the product being sold. If the product is not linked to any category, then the accounting account indicated in the last option (=other) of this step's configuration is used * By VAT rates: the accounting account is determined based on the VAT rate associated with the amount excluding VAT

*Reproduce this step by using the following API call(s) :*
GET accounting categories
GET chart of accounts
*(Filter on class 4 and 7 accounts)*
Choose accounting accounts to record specific cases. In this step, you can also indicate the default sales account mentioned in step 6 above.

*Reproduce this step by using the following API call(s) :*
GET accounting categories
GET chart of accounts
This step allows you to choose the accounting account for tips.\ This account will then be used when creating accounting entries to record the day's tips.

*Reproduce this step by using the following API call(s) :*
GET accounting categories
GET chart of accounts
This step involves indicating whether you want to create an additional entry for complimentary items: * If the option is not activated, anything given away for free is not shown in the generated accounting entries. * If you activate this option, you'll need to indicate an account to use for debit and credit. When creating accounting entries, these two accounts will be used to indicate the amount given away during each day. Generally, this involves a `class 7 account` for credit and a `class 6 account` for debit.

*Reproduce this step by using the following API call(s) :*
GET chart of accounts
*(Filter on class 6 and 7 accounts)*
This step allows you to specify whether entries are made in an account for discounts, rebates and debates ; it is an optional step.

*Reproduce this step by using the following API call(s) :*
GET chart of accounts
*(Filter on class 6 and 7 accounts)*
### Configuration 1. This final step allows you to specify the synchronization start date: choice of the date from which Z tickets will be synchronized. 💡 Synchronization starts automatically each night (at 6 AM). 2. Rounding default values Indicate the allowance that you tolerate for rounding errors (e.g. 1.00). ### Troubleshooting See the [following guide](/syncs/troubleshooting/pos-sync) for troubleshooting. # Pre-oauth2 sync Source: https://docs.chift.eu/syncs/pre-oauth2-sync In the pre-oauth2 sync, we do the same as the embedded sync, but you don't have to do any development on your side (you can if you want to retrieve statuses of executions, ...). The requirement is that you have an OAuth2 authentication flow in your software. You will only have to share one URL for each app that you want to connect to your end-users. This URL is protected by your OAuth2 authentication flow (only people with an account in your software can access this URL). Based on this authentication, we will create the consumer and the associated connection. If your end-user comes back to this configuration page, we will re-use the existing consumer and connection. This gives you the possibility to embed the configuration page of the sync in your software while not having to develop anything and delivering a fully white-labeled and smooth experience to your end-users. # Manual execution of a sync Source: https://docs.chift.eu/syncs/self-service You can trigger a new execution for any of your clients at any time from their consumer page. To run the synchronization, simply click the **play** button next to the sync. When you click this button, there are two possible scenarios: 1. Your sync **does not support** manual execution for a specific period. 2. Your sync **supports** manual execution for a specific period. ## Your sync doesn’t support manual execution for a specific period If your sync doesn’t support manual execution for a specific period, the following tab will open when you click the play button: From here, you can simply click **Execute** to start the sync for your client.\ This will run the default synchronization. ## Your sync supports manual execution for a specific period In this case, you can either run the default synchronization or run it for a specific date. *(If this view doesn’t appear when you click the play button, it means this feature hasn’t been implemented yet for your sync. Please reach out to your CSM.)* The self-service feature lets you choose between the following options: * Synchronize all missing data (don’t re-import data that’s already been synchronized). * Synchronize all data for a specific date, as if nothing had been imported before. * Synchronize all data for a specific date range, as if nothing had been imported before. ### Run the default synchronization To run the default synchronization (which won’t import anything that’s already been imported), simply click **Execute** without changing anything on this tab. ### Force synchronization for a specific date To run the synchronization for a specific date, click the **Single Date** tab, select the date you want to import, and click **Execute**. Note that this will import all data, **even if it has already been imported before.** **You must make sure with the client that the data can be safely re-imported; otherwise, the data will be duplicated in their tool.** If you’ve received confirmation from the client, check the **“I confirm”** checkbox and click **Execute** to start the synchronization. ### Force synchronization for a date range To run the synchronization for a range of dates, click the **Date Range** tab, select the desired dates, and click **Execute**. You’ll then be asked what needs to be imported: * If you only want to import missing data, simply click **Execute** and the sync will start immediately. * If you want to re-import all data for that date range, select the second option. If data was already imported for that date range, you will see an alert asking you to confirm the import of data.\ Make sure with the client that this is acceptable, otherwise this might result in duplicate data in your tool.\ Check the **“I confirm”** checkbox and click **Execute** to start the synchronization. *** ## Execution statuses Each execution is assigned a status that reflects its current state or final outcome. These statuses help you quickly determine whether the synchronization completed successfully or requires attention. ### IN PROGRESS **The execution is currently running.** * The sync has been triggered and is actively processing. * Logs and results may still be incomplete. * The status will update automatically once the execution finishes. *** ### FINISHED **All good — no errors occurred.** * The execution completed successfully. * All steps were processed without validation or technical errors. * No corrective action is required. This is the expected status for a healthy synchronization. *** ### FINISHED ⚠︎ **Completed with non-fatal errors.** * The execution finished processing. * One or more issues occurred (for example, validation errors or partial rejections). * No fatal or system-level error interrupted the execution. Typical examples: * Validation errors on specific records * Business rule violations * Non-blocking data inconsistencies The synchronization completed, but reviewing the execution details is recommended. *** ### ERROR **Execution failed due to a fatal error.** * The sync could not complete successfully. * A critical issue interrupted the process. Typical examples: * Authentication or authorization failures * Connectivity issues * Technical or system exceptions * Configuration errors Investigation is required. After resolving the root cause, the execution should be retried. *** ### CANCELED **Execution was manually stopped.** * The sync was intentionally canceled before completion. * No further processing occurred after cancellation. This status typically results from manual user intervention or administrative action. # POS sync Source: https://docs.chift.eu/syncs/troubleshooting/pos-sync This guide covers recurring issues that might occur with the POS to Accounting sync.\ It will provide you with required information on how to tackle issues inside the platform. ## My client is experiencing synchronization issues – what should I check? If your client is facing any issues with its synchronization, start by determining the consumer ID of its synchronization. This is the ID used for all communications regarding that client. To find it, you’ll need the name the client used when setting up their synchronization. You can also search using the email address of the person who created the sync. ### Is the synchronization enabled for my client? A synchronization is considered enabled if: 1. An accounting tool is connected. 2. A POS tool is connected. 3. All mappings have been completed by the user. To check points 1 and 2, look at the **connection** section in the screenshot above. In this example, both Pennylane and Lightspeed have an active status. If one is missing or pending, this indicates that the sync has not been fully enabled yet or that you’re checking the wrong consumer. To check point 3, apply the same logic to the **sync** section. If you see that the status of the sync is “enabled,” this indicates that the sync has been configured and that data should be synchronized into the accounting tool (here, Pennylane). If one of the above points is not met, the synchronization will not be executed for your client.\ You can see the current configuration of your client by clicking on "Get sync link" on the right top of the page.\ This will bring you the configuration page of your client (be careful to not modify connections or mappings).\ This should help you to evaluate what is going wrong.\ If your client is not able to connect to its POS or Accounting tool, please take a look at our [connector documentation](https://help.chift.app/collections/2773792625-activation-of-integrations) page. ### Has the synchronization been executed for my client? To see if a synchronization has been executed, check two different places: 1. The **Sync** section visible in the screenshot above. If you see a value in the “Last Execution” column, this indicates that the sync has already been executed at least once. 2. When you scroll down on the consumer page, you’ll find the transaction table listing all detailed requests related to this consumer. Click on the **Executions** tab to see all previous synchronization runs. ### The synchronization has already been executed but some data are missing First, go to the list of executions for this consumer (as described above) and click on the latest completed execution (Success or Error). There, you’ll find all the detailed logs available for this synchronization. **All related error messages are listed here.** #### Requests show a 401 or 403 status This indicates that the connected tool is blocking the connection. Possible causes include: * The user changed their password. * The connection token was revoked. * Some prerequisites were not met. To fix this, the client should: * Verify the prerequisites for the tool they’re trying to connect to (see [all connector documentation](https://help.chift.app/collections/2773792625-activation-of-integrations)). * Once the prerequisites are confirmed, reconnect the tool from the connection page. Once both steps are completed, the connection should work properly. #### The sum of all lines does not match This error indicates that the synchronization failed to match the items sold in a ticket with the total amount for that ticket. This can happen if: * The order included a tip that was not recorded in the POS tool. * Discounts were not properly configured in the POS tool. * There is another issue with the order data provided. If you’ve confirmed with the client that the first two points don’t apply, open a support ticket. Include the consumer ID of the synchronization and a detailed description of the issue. ## Issues reported by the client ### A specific day has not been imported If a particular day has not been imported, please verify the following: 1. The date range configured by your client includes the day to be imported. For example, if the client selected September 1st, we won’t try to synchronize orders from August 30th. This can be found using the "Get sync link" button and go to the last configuration step. 2. The day is still open in the POS tool. This means the service has not been closed yet, so it won’t be synchronized. 3. There’s an error for that day. In that case, check the execution details to get more information about the error. You’ll find more information about this in the section of this article describing the different possible errors. ### The client wants to re-import data for dates already imported You can manually trigger this sync again to re-import the data. For details, refer to [the relevant documentation](/syncs/self-service). ### The client notices differences between the values on their POS tool and Accounting tool If the client notices differences in the imported values, the first thing to check is the tolerance defined in the synchronization settings. To verify this, open the sync configuration (Get sync link - button) and go to the last configuration step. In the example above, the client has configured a tolerance of up to **50 euros**, meaning that order data will still be synchronized to the accounting tool even if there is a difference of up to 50 euros. If the client reports discrepancies while having a high tolerance value, the first recommended action is to lower the tolerance to a more realistic value, then wait a few days to check the synchronized values after this change. If the tolerance is already set to a realistic value and discrepancies persist, please reach out to our support team with the following details: * The **consumer ID** * If the tolerance was recently updated based on your feedback: the **date** when the change was applied * The **amounts expected** by the client for one of the most recent synchronized dates * A **detailed export of sales** for the same date from the client’s POS tool, to help us compare orders, synchronized values, and expected values. This export must include: * Order number * Order items * Quantity sold * Product amounts (total including VAT, VAT amounts, etc.) ⚠️ **Do not provide a processed file** that only shows the total amount for the date. # Data types Source: https://docs.chift.eu/unified-apis/PMS/datatypes Orders Payments Invoices Customers Locations Payment methods Accounting categories Closure Taxes Accounting transactions # Introduction to our PMS APIs Source: https://docs.chift.eu/unified-apis/PMS/overview View our [API documentation](/api-reference/endpoints/property-management-system) for details about the PMS endpoints and the data models. Our PMS APIs simplify integration with property management systems. This API allows you to: * Access and manage property data seamlessly * Retrieve reservations and bookings * Integrate with various hospitality services Typical use cases covered by our PMS APIs are the following: Connect to various PMS software to be able to provide reporting to your end-users. Connect to Chift's PMS API to automate manual inputs of your accounting processes. ## Explore our PMS API * **API Reference** – [PMS's API Documentation](/api-reference/endpoints/property-management-system) * **Connector Overview** – [PMS connectors overview](/connectors/pms/overview) * **Connector Coverage** – [PMS connectors coverage](/connectors/pms/coverage) # Data types Source: https://docs.chift.eu/unified-apis/POS/datatypes Orders Payments Sales Customers Locations Payment methods Product categories Products Accounting categories Closures Objectives Taxes # Introduction to our POS APIs Source: https://docs.chift.eu/unified-apis/POS/overview View our [API documentation](/api-reference/endpoints/point-of-sale) for details about the POS endpoints and the data models. The POS APIs let you integrate with a range of point-of-sale systems through a single interface. You can retrieve sales data, inventory, and customer information across multiple POS platforms, and collect and analyze sales data from different retail locations or restaurants. Typical use cases covered by the POS APIs include: Connect to various POS software to be able to provide reporting to your end-users. Connect to Chift's POS API to automate manual inputs of your accounting processes. ## Explore the POS API * **API Reference** – [POS's API Documentation](/api-reference/endpoints/point-of-sale) * **Implementation Guides** – [POS implementation guides](/developer-guides/api-guides/pos) * **Connector Overview** – [POS connectors overview](/connectors/pos/overview) * **Connector Coverage** – [POS connectors coverage](/connectors/pos/coverage) # Connectors Source: https://docs.chift.eu/unified-apis/accounting/connectors ## Accounting }> Explore ACD }> Explore AFAS Software }> Explore Cegid Loop }> Explore Cegid Quadra }> Explore Datev }> Explore Dynamics 365 Business Central }> Explore e-Boekhouden }> Explore VISMA eAccounting }> Explore Exact Online }> Explore Fiken }> Explore Fulll }> Explore Holded }> Explore Horus }> Explore Inqom }> Explore Lexoffice }> Explore Minox }> Explore Moneybird }> Explore MyUnisoft }> Explore Netsuite }> Explore Octopus }> Explore Odoo }> Explore Pennylane }> Explore QuickBooks Accounting }> Explore Reviso }> Explore Sage 50 FR }> Explore Sage 100 FR }> Explore Sage Bob 50 }> Explore Sage Generation Expert }> Explore Sage Intacct }> Explore SnelStart }> Explore Tiime }> Explore Tripletex }> Explore Twinfield }> Explore Yuki }> Explore Winbooks }> Explore Xero }> Explore Lexoffice }> Explore sevdesk # Bookyear Source: https://docs.chift.eu/unified-apis/accounting/datatypes/bookyear ### Definition A bookyear represents a specific accounting period (typically 12 months) within a folder. It defines the temporal structure that accounting systems universally impose. ### Purpose Accounting is fundamentally organized around periods that must be opened and closed.\ All transactions must be recorded within these periods, and companies are required to report financial results for each bookyear. ### Relationships * Belongs to a specific **folder**. * Contains all accounting records for that accounting period. * Multiple bookyears can exist within a folder for historical management, but usually only one is active at a time. * Operations are typically prohibited on closed bookyears. ### Endpoints | Method | Endpoint | Description | | ------ | ------------------------------------------------------------------ | ------------------------------- | | GET | [Get bookyears](/api-reference/endpoints/accounting/get-bookyears) | List all bookyears for a folder | # Chart of Accounts Source: https://docs.chift.eu/unified-apis/accounting/datatypes/chart-of-accounts ### Definition * **Chart of Accounts (CoA):** The complete list of all accounts a company uses to record its financial transactions, organized systematically. * **Ledger Accounts:** The individual accounts within the CoA that track specific categories such as assets, liabilities, equity, revenues, or expenses. ### Purpose * The **Chart of Accounts** provides the backbone for financial reporting by ensuring all transactions are consistently classified. * **Ledger Accounts** hold the detailed records of each type of financial activity and serve as the foundation for journals, entries, and financial statements. ### Structure * **Chart of Accounts** * Organized by account codes or numbering ranges * Can be hierarchical (main accounts, sub-accounts) * Includes account type classifications (Asset, Liability, Equity, Revenue, Expense) * **Ledger Accounts** * Each has an account number, name, description, and type * Store balances and transaction history * Can be customized per folder/company while following the general framework ### Relationships * Each **folder** has one Chart of Accounts. * The Chart of Accounts contains all **ledger accounts**. * Ledger accounts are referenced by **journal entries** (debit and credit lines) and **invoice lines**. * Account balances are continuously updated through journal entries. * The CoA is the basis for generating financial statements. | Method | Endpoint | Description | | ------ | ---------------------------------------------------------------------------------------------- | ------------------------------ | | POST | [Create Ledger Account](/api-reference/endpoints/accounting/create-ledger-account) | Create a new ledger account | | GET | [Get Chart of Accounts](/api-reference/endpoints/accounting/get-chart-of-accounts) | Retrieve the chart of accounts | | POST | [Get the Balance of Accounts](/api-reference/endpoints/accounting/get-the-balance-of-accounts) | Retrieve balances of accounts | # Folders Source: https://docs.chift.eu/unified-apis/accounting/datatypes/folder ### Definition Top-level organizational containers that represent the different legal entities within an accounting system. ### Purpose Folders provide the highest level of data segregation. They allow you to manage multiple companies or business units through a single API integration. ### Relationships * Each folder contains one or more **bookyears**. * Serves as the root container for all accounting data of a specific business entity. ### Endpoints | Method | Endpoint | Description | | ------ | -------------------------------------------------------------- | ------------------------------- | | GET | [Get folders](/api-reference/endpoints/accounting/get-folders) | List all folders for a consumer | ### See also * [Multi-folder feature](/developer-guides/api-guides/accounting/folders) # Invoices (Sales / Purchase Entries) Source: https://docs.chift.eu/unified-apis/accounting/datatypes/invoices ### Definition **Sales and purchase entries** provide the API route for creating **customer invoices (sales)** and **supplier invoices (purchases)** in the accounting system.\ They abstract the underlying accounting complexity while ensuring that every transaction is properly reflected in the ledger. ### Purpose * **Simplify invoice creation** for users by providing a business-friendly interface. * **Automatically generate balanced journal entries** behind the scenes, ensuring accounting integrity. * **Standardize behavior across accounting systems**, whether or not the target system natively supports invoices. * **Ensure proper linkage to ledger accounts** for revenue, expenses, taxes, and receivables/payables. * **Integrate with payment reconciliation processes** and matching workflows. ### Data abstraction logic * **Target system supports invoices**: creates native invoice objects in the accounting software. * **Target system lacks invoice support**: automatically generates equivalent journal entries to produce the same accounting result. ### Endpoints | Method | Endpoint | Description | | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | | POST | [Create Sale/Purchase Entry](/api-reference/endpoints/accounting/create-salepurchase-entry) | Create a single sale/purchase entry | | POST | [Create Sale/Purchase Entry (Multiple Plans)](/api-reference/endpoints/accounting/create-analytic-account-multiple-analytic-plans) | Create multiple entries with analytic plans | | GET | [Get Invoices by Type](/api-reference/endpoints/accounting/get-invoices-by-type-salepurchase-entries) | List invoices by type (sale/purchase) | | GET | [Get One Invoice](/api-reference/endpoints/accounting/get-one-invoice-salepurchase-entry) | Retrieve a specific invoice | | GET | [Get One Invoice (Multiple Analytic Plans)](/api-reference/endpoints/accounting/get-one-invoice-salepurchase-entry--multiple-analytic-plans) | Retrieve invoice with multiple analytic plans | | GET | [Get Invoices by Type (Multiple Analytic Plans)](/api-reference/endpoints/accounting/get-invoices-by-type-salepurchase-entries--multiple-analytic-plans) | List invoices by type with multiple analytic plans | ### See also * [working with accounts in invoices](/developer-guides/api-guides/accounting/accounts-invoice) # Journal entries Source: https://docs.chift.eu/unified-apis/accounting/datatypes/journal-entries ### Definition A **journal entry** (also known as a **GL entry** in Anglo-Saxon accounting systems) is the lowest-level accounting record of a business transaction.\ It always contains at least two lines and must balance: the total debits equal the total credits.\ This principle is universal across all accounting models and forms the foundation of (double-entry) bookkeeping. ### Purpose * Serves as the **base unit of accounting**: every transaction ultimately results in one or more journal entries. * Provides full flexibility: any transaction can be recorded here, from simple payments to complex adjustments. * While journal entries can always be used, the API also exposes **specialized entry endpoints** (e.g. Financial Entries, Sales/Purchase Entries) that simplify common use cases by exposing only the relevant fields. ### Structure Each journal entry includes: * **Date** of transaction * **Reference/description** * **Journal identifier** (the journal where the entry is recorded) * **Lines** (minimum two: each line is a debit or credit on a ledger account, and all lines must balance) * Optional links to **source documents** (e.g. invoice, bank statement) ### Relationships * Recorded inside a specific **journal** (and therefore linked to a bookyear via the journal). * References **ledger accounts** through debit and credit lines. * Can be generated automatically from higher-level abstractions such as **invoices** or **financial entries**. * Specialized entry types (sales, purchase, financial) are simplified versions of journal entries. ### Endpoints | Method | Endpoint | Description | | ------ | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | | POST | [Create Journal Entry](/api-reference/endpoints/accounting/create-journal-entry) | Create a journal entry | | POST | [Create a Financial Entry](/api-reference/endpoints/accounting/create-a-financial-entry) | Create a simplified financial entry | | GET | [Get Journal Entries](/api-reference/endpoints/accounting/get-journal-entries) | List all journal entries | | GET | [Get Journal Entries (Multiple Analytic Plans)](/api-reference/endpoints/accounting/get-journal-entries-multiple-analytic-plans) | List journal entries with multiple analytic plans | | GET | [Get One Journal Entry](/api-reference/endpoints/accounting/get-one-journal-entry) | Retrieve a specific journal entry | | POST | [Match Entries](/api-reference/endpoints/accounting/match-entries) | Match journal entries for reconciliation | ### See also * [working with accounts in journal entries](/developer-guides/api-guides/accounting/accounts-je) # Journals Source: https://docs.chift.eu/unified-apis/accounting/datatypes/journals ### Definition A **journal** is a logical book of entry that groups accounting transactions by type before they are posted to the ledger.\ In some European countries (e.g., France, Belgium, Spain), every transaction must be recorded in a journal (sales, purchases, bank, etc.) before feeding into the general ledger.\ In other systems (e.g. Anglo-Saxon accounting), the concept of journal is less explicit but similar functionality exists under batch posting, templates, or sub-ledgers. ### Purpose * Provides chronological recording and classification of transactions. * Ensures traceability and compliance in jurisdictions where journals are legally required. * Serves as an organizational layer that simplifies reconciliation and reporting. ### Common journal types * **Sales Journal** → Customer invoices and revenue transactions. * **Purchase Journal** → Supplier invoices and expense transactions. * **Bank Journal** → Each bank account has its own dedicated journal. * **Cash Journal** → Cash operations. * **General Journal** → Adjustments, opening balances, miscellaneous transactions. ### Comparison with general ledger * **Journals**: First entry point for transactions, organized by type and chronology. * **General Ledger**: The consolidated record of all accounts, balances, and financial statements.\ Even in systems without explicit journals, transactions typically pass through batch postings or templates before reaching the general ledger. ### Relationships * Journals are defined at the level of a **folder** (company/entity). * Transactions recorded in a journal are tied to a **bookyear** through their dates. * Contains multiple **journal entries** recorded in chronological order. * Journal entries posted in journals feed into the **ledger accounts**. * Each bank account is usually tied to its own dedicated journal. ### Endpoints | Method | Endpoint | Description | | ------ | -------------------------------------------------------------------- | -------------------- | | POST | [Create Journal](/api-reference/endpoints/accounting/create-journal) | Create a new journal | | GET | [Get Journals](/api-reference/endpoints/accounting/get-journals) | List all journals | # Partners (Customers, Suppliers, Employees) Source: https://docs.chift.eu/unified-apis/accounting/datatypes/partners ### Definition A **partner** represents a counterparty involved in your accounting processes. Partners are the **third parties** used in accounting: **customers**, **suppliers**, and **employees**. They are required to post receivable/payable/payroll-related entries and to drive reconciliation flows. ### Purpose * Serve as the **reference entity** for transactions in the accounting system. * Maintain accurate accounting records by linking transactions to the correct accounts. * Provide additional metadata such as contact information, payment terms, and tax information. ### Relationships * Always referenced by **invoices**. Possibly also in **financial entries**, and **journal entries**. * Can have default **ledger accounts** for automatic posting in journal entries. ### Endpoints #### Clients | Method | Endpoint | Description | | ------ | -------------------------------------------------------------------- | -------------------------- | | POST | [Create Client](/api-reference/endpoints/accounting/create-client) | Create a client (customer) | | GET | [Get One Client](/api-reference/endpoints/accounting/get-one-client) | Retrieve a specific client | | GET | [Get Clients](/api-reference/endpoints/accounting/get-clients) | List all clients | | PATCH | [Update Client](/api-reference/endpoints/accounting/update-client) | Update an existing client | #### Suppliers | Method | Endpoint | Description | | ------ | -------------------------------------------------------------------------- | ---------------------------- | | POST | [Create Supplier](/api-reference/endpoints/accounting/create-supplier) | Create a supplier | | GET | [Get One Supplier](/api-reference/endpoints/accounting/get-one-supplier) | Retrieve a specific supplier | | GET | [Get Suppliers](/api-reference/endpoints/accounting/get-suppliers) | List all suppliers | | PATCH | [Update Supplier](/api-reference/endpoints/accounting/update-one-supplier) | Update an existing supplier | #### Employees | Method | Endpoint | Description | | ------ | ------------------------------------------------------------------ | ------------------ | | GET | [Get Employees](/api-reference/endpoints/accounting/get-employees) | List all employees | ### See also * [Working with accounts in journal entries](/developer-guides/api-guides/accounting/accounts-je) * [Invoices and partners](/developer-guides/api-guides/accounting/accounts-invoice) # Introduction to our Accounting APIs Source: https://docs.chift.eu/unified-apis/accounting/overview One API to access and manage accounting data across all major software providers. ## Why use the Accounting API? * Connect to multiple accounting platforms with a single integration * Access standardized data models for journals, invoices, expenses, and more * Handle provider-specific differences seamlessly * Reduce implementation and maintenance time *** ## How it works ```mermaid theme={null} flowchart LR A[Your App] --> B[Unified Accounting API] B --> C[Sage] B --> D[Cegid] B --> E[Xero] B --> F[QuickBooks] ``` **Explore our Accounting API:** * **API Reference** – [Accounting's API Documentation](/api-reference/endpoints/accounting) * **Data Types & Concepts** – [Accounting's data types and concepts](/unified-apis/accounting/datatypes) * **Implementation Guides** – [Accounting implementation guides](/developer-guides/api-guides/accounting) * **Connector Overview** – [Accounting connectors overview](/connectors/accounting/overview) * **Connector Coverage** – [Accounting connectors coverage](/connectors/accounting/coverage) # Data types Source: https://docs.chift.eu/unified-apis/banking/datatypes Financial institutions Banking accounts Financial accounts Counterparts accounts # Introduction to our Banking APIs Source: https://docs.chift.eu/unified-apis/banking/overview View our [API documentation](/api-reference/endpoints/banking) for details about the banking endpoints and the data models. The Banking APIs let you integrate with banks through external providers. You can: * Aggregate account information from multiple banks. * Access a real-time transaction database. Typical use cases covered by the Banking APIs include: Connect to your users' banks to be able to provide reporting to your end-users. Automatically import transactions into your tool to predict your future expenses. Connect to Chift's Banking API to automate manual inputs of your accounting processes. Write your customers' bank transaction data into your tool for reconciliation. ## Explore the Banking API * **API Reference** – [Banking's API Documentation](/api-reference/endpoints/banking) * **Connector Overview** – [Banking connectors overview](/connectors/banking/overview) * **Connector Coverage** – [Banking connectors coverage](/connectors/banking/coverage) # Data types Source: https://docs.chift.eu/unified-apis/ecommerce/datatypes Customers Products Locations Orders Payment methods Product categories Tax rates Countries # Introduction to our eCommerce APIs Source: https://docs.chift.eu/unified-apis/ecommerce/overview View our [API documentation](/api-reference/endpoints/ecommerce) for details about the eCommerce endpoints and the data models. Our eCommerce APIs offer a single point of integration for various online shopping platforms and marketplaces.\ This enables businesses to manage product listings, orders, and customer data across multiple eCommerce channels, simplifying multi-channel selling and inventory management. Typical use cases covered by our eCommerce APIs are the following: Connect to various ecommerce software to be able to provide reporting to your end-users. Connect your cash flow management platform to Chift's ecommerce API and sync orders to access future cash operations. Connect to Chift's ecommerce API to automate manual inputs of your accounting processes. ## Explore our Ecommerce API * **API Reference** – [Ecommerce's API Documentation](/api-reference/endpoints/ecommerce) * **Connector Overview** – [Ecommerce connectors overview](/connectors/ecommerce/overview) * **Connector Coverage** – [Ecommerce connectors coverage](/connectors/ecommerce/coverage) # Data types Source: https://docs.chift.eu/unified-apis/invoicing/datatypes Invoices Taxes Products Opportunities Contacts # Introduction to our Invoicing APIs Source: https://docs.chift.eu/unified-apis/invoicing/overview View our [API documentation](/api-reference/endpoints/invoicing) for details about the invoicing endpoints and the data models. Our invoicing APIs provide a standardized way to interact with multiple invoicing platforms.\ This allows you to create, send, and manage invoices across different systems. Typical use cases covered by our Invoicing APIs are the following: Connect to various invoicing software to be able to provide reporting to your end-users. Connect your cash flow management platform to Chift's invoicing API and sync open invoices to access future cash operations. Connect your debt recovery platform to Chift's invoicing API and use invoices' statuses to automate processes and save your users precious time. Connect your digital lending platform to Chift's invoicing API and sync data from your users' invoicing tools to fully automate the loan eligibility assessment process. Connect to Chift's invoicing API to automate manual inputs of your accounting processes. ## Explore our Invoicing API * **API Reference** – [Invoicing's API Documentation](/api-reference/endpoints/invoicing) * **Connector Overview** – [Invoicing connectors overview](/connectors/invoicing/overview) * **Connector Coverage** – [Invoicing connectors coverage](/connectors/invoicing/coverage) # Unified APIs Source: https://docs.chift.eu/unified-apis/overview Build once. Connect everywhere. With Chift’s Unified APIs, you only need **one integration** to unlock a full family of financial connectors — all embedded and white-labeled within your product. *** Unified APIs View our [API documentation](/api-reference) for details about the endpoints and the data models. ## Why use Unified APIs? * Save time: no need to build and maintain separate connectors * Reduce costs: avoid a dedicated integration team * Expand coverage: access many providers with one integration ## Explore our Unified APIs Explore our Accounting API Explore our Point of Sale API Explore our eCommerce API Explore our Invoicing API Explore our Banking API Explore our Payment API Explore our Property Management System API Ready to build? The [Unified API developer guide](/developer-guides/unified-api/overview) walks through authentication, connecting a customer, and calling the API. # Data types Source: https://docs.chift.eu/unified-apis/payment/datatypes Balances Transactions Payments Refunds # Introduction to our Payment APIs Source: https://docs.chift.eu/unified-apis/payment/overview View our [API documentation](/api-reference/endpoints/payment) for details about the payment endpoints and the data models. Our Payment APIs streamline integration with payment processors, including popular providers like Mollie and Stripe. This API enables you to: * Retrieve transactions * Retrieve balances Typical use cases covered by our Payment APIs are the following: Connect to various Payment software to be able to provide reporting to your end-users. Connect to Chift's Payment API to automate manual inputs of your accounting processes. ## Explore our Payment API * **API Reference** – [Payment's API Documentation](/api-reference/endpoints/payment) * **Connector Overview** – [Payment connectors overview](/connectors/payments/overview) * **Connector Coverage** – [Payment connectors coverage](/connectors/payments/coverage)