Last updated: 23 September 2026
CustomerGate 365: setup guide
From installing CustomerGate 365 to a first request through the customer portal, step by step. Written for the administrator of a Business Central environment, or for a partner doing it on their behalf. Screen names are as Business Central shows them in English.
Before you start
- Business Central online, version 28.0 or later.
- A website that uses the CustomerGate 365 web services, built by Van Oosten Software or by another developer. The web service reference describes what it has to call.
- Two Microsoft Entra app registrations, one for the website and one for the catalog synchronization. The next step covers them.
- An e-mail account in Business Central to send from, other than SMTP with a password.
- A user with the SUPER permission set, for the installation and for Repair Permissions.
- Someone who knows the item list. Which items belong on the website is decided in Business Central, and that is not a technical choice.
- Optional: iFacto Steel 365 and DXSteel Doc Archive. If the customer uses them, install them first, in a company that has data: the app looks for them while it installs.
- Optional: if the website uses webhooks, this environment has to allow the app to make outgoing HTTP requests. That is a separate step further down.
Register the two applications in Microsoft Entra
The website signs in to Business Central as two applications, each with its own client ID and secret, through the OAuth 2.0 client credentials flow. Register them in the Microsoft Entra admin center, under App registrations:
- Create an app registration for the website (requests and the customer portal) and one for the catalog synchronization.
- Give each registration the application permission API.ReadWrite.All of Dynamics 365 Business Central, and grant admin consent for it.
- Create a client secret, or a certificate, for each registration and give it to the website's developer. The secret stays with the website; it does not go into Business Central.
- Note the Application (client) ID of both registrations. You fill those in on CustomerGate Setup; Repair Permissions registers the applications in Business Central itself.
Install the app
Install CustomerGate 365 from AppSource as a user with the SUPER permission set: in Business Central through Extension Management and its marketplace, or from the CustomerGate 365 listing on Microsoft Marketplace. Without SUPER the app installs, but it cannot write its tenant permission sets. On installation, per company, it creates:
- the number series WEBREQ (WEB000001 onwards) and WEBACCOUNT (ACC000001 onwards), and the setup record with its defaults;
- four job queue entries, all four on hold: the mail job every five minutes, the cleanup job daily at 02:00, the webhook delivery job every five minutes and the web catalog recompute daily at 03:00;
- the web services the website calls;
- a first computation of the web catalog, so that the catalog services filter from the very first synchronization;
- the default archive categories, where DXSteel Doc Archive is installed;
- the tenant permission sets, when a SUPER user installs the app.
Enter the licence key
A production environment needs a licence key; a sandbox does not. From installation a thirty-day trial runs in which everything works, so you do not have to wait for it. Open CustomerGate Licence, choose Request a Licence Key and send the Tenant ID and the Environment Name to Van Oosten Software. Paste the key you get back into the Licence Key field.
Without a valid key, only the web services stop after the trial; Business Central itself keeps working. A key for Requests or Portal covers one company: enter it in the company the website runs on. See the help for CustomerGate Licence.
Run the assisted setup
Open Assisted Setup and choose Set Up CustomerGate 365. The guide asks, in this order, for the two client IDs, the web catalog policy, the e-mail settings and the portal address, and with Repair Permissions Now it also sets up the permissions when you choose Finish. Everything it asks is also on CustomerGate Setup, where you can change it later.
Repair the permissions
On CustomerGate Setup, check Website Client ID and Synchronization Client ID and choose Repair Permissions. It needs SUPER. The app registers both applications in Business Central if that has not happened yet, creates its tenant permission sets and assigns, for all companies:
- The website application
- VOA WEB API, VOA WEB PORTAL, VOA WEB BASELINE, VOA WEB CONTRACT, VOA CG EXECUTE and VOA CG MAIL; plus VOA CG S365 ARCHIVE with the Steel 365 document archive, VOA CG DOCUMENTS with Portal Documents from Reports, and Continia's CDC BASIC where Continia Document Capture is installed.
- The synchronization application
- VOA WEB SYNC; plus VOA CG S365 SYNC with Steel 365.
Afterwards, the lines under Permissions and the line Website Permission Baseline should all be in order. Business Central applies changed permissions after a few minutes. Never give the website's applications D365 BASIC: it would let them read customers, contacts, sales documents and margins, which the app deliberately keeps out of their reach.
Give your own people access
- Inside sales
- VOA Web Inside Sales, shown as CustomerGate - Inside Sales: the daily work with requests, account requests, portal users, acceptances and the mail round.
- Administrators
- VOA Web Admin, shown as CustomerGate - Administration: the setup, the cleanup, the web catalog and the webhook subscriptions as well. Repair Permissions itself needs SUPER on top of it.
- The job queue user
- The user the job queue runs under needs VOA Web Inside Sales and the usual rights to send e-mail.
- Whoever maintains items
- Nothing extra. The web catalog decision is brought up to date as soon as an item changes, also under a buyer who holds none of the CustomerGate permission sets.
Set up e-mail
- Add an e-mail account in Business Central (E-mail Accounts) and make it the default account. Do not use SMTP with a password: Exchange Online switches off SMTP basic authentication by default from the end of December 2026.
- To send from another address, assign an account to the CustomerGate scenarios. There is no fallback to a built-in account. Without a default account, only the scenarios you assigned an account to send e-mail; without any account, nothing is sent at all.
- On CustomerGate Setup, fill in Notification E-mail and Inside Sales Language, and check Response Time (Working Days) against what your website promises.
- Fill in Portal Address once the portal is live. Until then, the e-mail about an approved account request says that the portal opens soon.
The five scenarios, under Scenarios on the e-mail account:
- CustomerGate - Confirmation to Requester
- CustomerGate - Notification to Inside Sales
- CustomerGate - Message to Account Requester
- CustomerGate - Account Request Notification to Inside Sales
- CustomerGate - Customer Portal Sign-in Code
Turn on the four job queue entries
All four arrive on hold, and on purpose: uploading an app should not send e-mail, should not erase anything, should not call an address outside Business Central and should not move a website's catalog. Once the e-mail account, the notification address and the retention period are right, choose Turn On Both Jobs on CustomerGate Setup. That button covers the mail job and the cleanup job only, and it refuses while Cleanup Disabled is on or while no e-mail account can send. You set the other two to Ready yourself.
- The mail job
- Sends confirmations and notifications, every five minutes. Send Pending E-mails Now runs a round by hand.
- The cleanup job
- Erases personal data after the retention period, daily at 02:00. Clean Up Personal Data Now runs a round by hand.
- The webhook delivery job
- Delivers the queued webhooks, every five minutes. While no subscription is switched on it does nothing at all, so leaving it on hold costs nothing. Set it to Ready as soon as the first subscription goes on, otherwise the queue quietly fills up. Open it with Webhook Delivery Job on the setup page.
- The catalog job
- Recomputes the whole web catalog, daily at 03:00, and clears removals older than 180 days. It is a safety net, not the engine: the decision is already updated the moment an item, an item category or a rule changes. Set it to Ready all the same, with Catalog Job on the setup page; it catches what an event cannot see, such as an import that skips triggers or a company restored from a backup.
An update of the app never overwrites these entries once they exist, so a schedule you changed yourself stays as it is. The user the job queue runs under needs VOA Web Inside Sales and the usual rights to send e-mail.
Decide what goes on the website
Which items the website sees is decided in Business Central, not on the website. Do this before the site goes public: internal items, scrap codes, machine hours and everything ever bought for one job do not belong on it.
- Choose the policy on CustomerGate Setup, in the Web Catalog group. With Only Publish Marked Items off, every item belongs in the catalog except what is excluded. With it on, you start from an empty catalog that fills up as you publish. For a new website, on is the safer choice: nothing is public until somebody has said so.
- Record the standing exclusions on Web Publication Rules, in order. Typical first rules: item numbers starting with INT, the scrap and hours categories, and items without a description. The first rule that matches an item decides; closing the page recomputes the whole catalog.
- Walk Items on the Website once, with the view Excluded by a Rule or Category. Everything in it is out of the catalog without anyone having said so on the item, which is exactly where a rule that takes too much shows up. Publish on Website and Exclude from Website work over a selection, here and on the ordinary item list.
- On the Web tab of the item card, switch on Not Orderable Online for items that belong in the catalog but should get no order button. They then appear as price on request. At the counter everything the company sells can still be sold.
- Check the Catalog Decision line. If it says the catalog has never been computed in this company, choose Recompute Web Catalog. While that line is red, the catalog services refuse to serve at all, with the marker
[VOA-CatalogNotComputed], rather than hand over an unfiltered catalog.
Every decision is recorded on the item with a reason, in words, so that "it is not on the website" is never the whole answer. Pictures travel as they sit on the item card; nothing is resized. A picture above Maximum Picture Size (MB), 10 by default, is reported and skipped instead of handed over, so one oversized photo cannot end a whole run. Whatever leaves the catalog lands on Web Catalog Removals, so that a website that synchronizes takes it off the site as well.
The rest of the settings on the card
CustomerGate Setup is grouped by subject. What the steps above did not cover is here, in the order of the card.
- Inside Sales
- Rejection Reason Mandatory forces a choice from the Rejection Reasons list; it is off by default, because a reason that is compulsory becomes "n/a" within a month. Duplicate Window (Hours) is 24 and Max. Requests per Sender is 10: within that window the screening marks a second request from the same address as a duplicate and notices a busy sender. Zero switches both off. Default Customer Template decides which template Create Customer proposes.
- Demo Mode
- Switch Demo Mode on in a demo, training or test company. Every message then goes to Demo E-mail Recipient, with [DEMO] in front of the subject and, in the first line, the address it would have gone to. Without a demo recipient nothing is sent at all; that is deliberate, because sending to the real customer is the one thing this switch exists to prevent. Turning it on and turning it off both ask for confirmation, and the second question is the one that matters.
- Customer Portal
- Besides the portal address and the session settings, this group holds Portal Notifications Enabled and Maximum Invitations per Day. The first is the company's master switch for messages to portal users and is off after a fresh installation and after every update, so that an environment being updated or copied does not start mailing on the strength of choices nobody remembers. Switching it on is not enough: each portal user also chooses for themselves what they want to hear about, and only they can. The second is 5 and limits how many colleagues one Buyer may invite in a day; zero switches inviting off.
- Web Catalog
- Only Publish Marked Items, Catalog Decision, Items on the Website, Maximum Picture Size (MB) and Catalog Job Status. See the step above.
- Attachments
- Attachments Enabled switches uploading on or off; files that are already there stay. Allowed Attachment Types lists the extensions, by default pdf, png, jpg, jpeg, dxf, dwg, step, stp, xlsx and csv. Maximum Attachment Size (KB) is 10240, Maximum Attachments per Request is 10, and Copy Attachments to Sales Document lets the files travel along at conversion. On top of that there is a deny list in the code, including exe, js, bat, html and svg, that no setting can override: put one of them in the allowed list and the card warns you. Since 1.0.44 the website reads these values through
voaPing, so they do not have to be copied into it. - Webhooks
- Outgoing HTTP Requests and Webhook Delivery Job are status lines, not settings. Webhook Failures Before Disabling is 20 and Webhook Log Retention (Days) is 30. The subscriptions themselves are on a list of their own; see the step below.
Retention, and the copies of sent e-mails
Set Retention Period (Days) on CustomerGate Setup to what the privacy statement on your website promises; the default is 365 days. Business Central also keeps every sent message, including sign-in codes, in Sent Email, which the cleanup does not reach. Set a retention policy for Sent Email on the Retention Policies page, equal to the CustomerGate retention period; seven days is the minimum there.
Webhooks, only if the website uses them
With webhooks, Business Central calls your website itself the moment something happens: a quote released or accepted, an order created, a shipment or an invoice posted, an account approved or rejected, a request converted or rejected. The site then does not have to keep asking. They are off until somebody creates a subscription; if your website does not use them, skip this step.
- Allow outgoing HTTP: Extension Management, CustomerGate 365, Configure, Allow HttpClient Requests. Without it, events are queued and never sent.
- Create a subscription per event on Webhook Subscriptions, reachable from CustomerGate Setup and from the role center. There is no web service that creates or reads subscriptions: an address Business Central is going to call is not something a website should be able to set for itself.
- Choose Generate Secret and put the secret in the website. It is shown once and never again: not on the page, not in an export and not in a database copy. Business Central signs every call with it, and the website is expected to verify that signature; a receiver that does not verify trusts anyone who knows the address.
- Send a test event with Send Test Event and check that the website processes it and answers with a 2xx.
- Set the webhook delivery job to Ready and switch the subscription on with Enable.
A delivery is attempted five times, at growing intervals, and never goes out from inside a posting. A subscription that fails too often in a row switches itself off and never comes back by itself: repair the endpoint, send a test event and choose Enable. Parked deliveries come back with Retry Now. A payload holds numbers, states, amounts and dates and no personal data; whoever needs the name behind a request asks for it with the number. The web service reference describes the events, the headers and the recipe for the signature.
Archive categories, for Steel 365 customers
Only where iFacto DXSteel Doc Archive is installed. The defaults are filled in during installation. Open Archive Categories from CustomerGate Setup, check which categories customers may see and as what, and choose Repair Permissions after every change, so the security filter on the archive follows.
Point the website at the environment
Give the website's developer the tenant, the name of the environment and the company. After Repair Permissions, wait a few minutes for Business Central to apply the permissions, then let the website run its own checks and a first catalog synchronization. Check while you are there that the website also reads the removals: without that service, an item you exclude stays on the site forever.
A first test through the portal
- Send an account request from the website, with an e-mail address you can read.
- Approve it in Account Requests: Select Customer, then Approve with the role Buyer.
- Sign in on the website with the code from the e-mail.
- Open a quote and a document, and accept a released quote once.
- Check Website Quote Acceptances in Business Central, and check that the confirmation and the notification have been sent.
- Look up one item on the website that belongs there and one you excluded, so that you know the catalog filters.
When something is wrong, start at diagnostics
Open CustomerGate Diagnostics, from CustomerGate Setup, from the role center or through search. It puts the whole installation on one screen: the environment and its type, the versions of the app and the platform, which modules were found, the state of the mail job, the cleanup job and every web service, the last cleanup run, the counts of requests per status and the active portal users. Each line carries a verdict, a sentence saying what it means, and where possible a fix; nothing is ever repaired silently.
- Test Connection
- Checks, per Entra application, that the user exists and is enabled, that every permission set is assigned, that the tenant sets carry what this version of the app writes, that every web service is published, and that the setup is complete. A call that worked yesterday and gives a 403 today usually comes from that third line.
- Permission Gaps
- Puts what CustomerGate expects next to what is granted, per object, and shows the differences only. That is the quickest answer to an error message that names an object.
At the bottom of the screen the same thing appears as Markdown, to paste into a support e-mail. It holds counts and states only: no e-mail addresses, no names, no customer numbers and no document numbers. Send that report along with your question and half the digging is already done.
Environment copies and the copy guard
CustomerGate records the environment in which its settings were adopted: at installation, for a company created later, and with This Is the Real Environment. Not on an ordinary save, because one changed setting in a copy would otherwise lift the guard.
| Environment | What the copy guard does |
|---|---|
| A sandbox that differs from the adopted environment | Blocks all outgoing e-mail, puts the mail job and the cleanup job on hold, and shows a red banner on the setup page. The block does not wait for anyone to sign in: it is recomputed for every message, so a copy whose job queue starts before the first user sends nothing either. |
| A production environment that differs | Shows the same banner and switches nothing off. Taking a live environment down over a suspicion would break the website. |
| An environment that does not differ | Nothing. |
If the environment is right, choose This Is the Real Environment. That adopts the current environment and lifts the block, with a confirmation that says what it means and a second question about the mail job and the cleanup job the guard put on hold. Then choose Repair Permissions as well: an environment copy carries the Entra registrations and the web services of the source environment, and those do not belong here.
Settings from one environment to another
Export Settings writes this company's configuration to a JSON file: the settings, the two number series, the archive categories, and which e-mail account sends each of the five scenarios, by address, because an account ID differs per environment.
What is deliberately never in it: the client IDs of the Entra applications, the environment fields, the observations of the last cleanup run, the moment from which mail is sent, and no secret, token or password of any kind. The notification address is in it, so treat the file as internal.
Import Settings reads such a file, lists setting by setting what it would change, with the current value next to the one from the file, and applies it only after that. A file from another app, or from a newer version of this one, is refused whole. A category that already exists is left as it is; a scenario whose e-mail address does not exist in this environment is skipped, because creating a mail account needs credentials.
What the status lines mean
CustomerGate Setup shows with status lines what is ready and what is not. They are the quickest check after every change:
| Status line | In order | Otherwise |
|---|---|---|
| voaPortal Web Service | Published | Not published: the portal does not work. Publish the service on the Web Services page. |
| E-mail Account | Present | No e-mail account, or accounts without a default: add an account and make it the default. |
| Mail Job Status | Ready | On hold, or no entry yet: nothing is sent. Choose Turn On Both Jobs. |
| Cleanup Job Status | Ready | On hold, or no entry yet: nothing is erased. Choose Turn On Both Jobs. |
| Webhook Delivery Job | Running, or on hold while no subscription is switched on | On hold while a subscription is switched on: nothing is delivered and the queue fills up. Open Webhook Delivery Job and set it to Ready. |
| Outgoing HTTP Requests | Allowed | Not allowed: webhooks are queued and never sent. Switch on Allow HttpClient Requests under Extension Management, CustomerGate 365, Configure. |
| Catalog Job Status | Ready | On hold: a missed change is only corrected when someone chooses Recompute Web Catalog. Open Catalog Job. |
| Catalog Decision | Computed, with the moment next to it | Never computed: the catalog services refuse to serve, so that no unfiltered catalog leaves the building. Choose Recompute Web Catalog. |
| Items on the Website | Two counts that match what you expect | A count that changes suddenly: a rule or an item category is taking more with it than intended. Look at the view Excluded by a Rule or Category. |
| Awaiting Cleanup | 0 | Requests past their retention period still hold personal data: check the cleanup job and Cleanup Disabled. |
| Website Permission Baseline | OK: no D365 BASIC on the website account | D365 BASIC is assigned to the website account: remove it there. |
| Tenant Permission Sets | Complete | Sets missing, or lines missing or different: choose Repair Permissions. |
| Document Archive Filter | Present, or not applicable without the archive | Missing: choose Repair Permissions; if that does not help, set the filter by hand on the archive line of the set. |
| Assignments | OK | Assignments missing: fill in the client IDs and choose Repair Permissions. |
| Environment Copy Guard Active | No | Yes: this company looks like a copy in a sandbox, and no e-mail goes out. If the environment is right, choose This Is the Real Environment and then Repair Permissions. |
| Rejection Reasons | The number of reasons that can still be chosen | 0 while Rejection Reason Mandatory is on: rejecting then fails. Fill the Rejection Reasons list. |
| Steel 365 Module | Active or Off | Information only: it follows from whether iFacto Steel 365 is installed. |
| Document Archive | Present, or Not present - the portal shows the PDFs from the Business Central reports | Not present - the portal does not show any documents (yellow): no archive and Portal Documents from Reports is off. Turn that switch on if customers should get their PDFs in the portal. |
If a line is red and says too little, open CustomerGate Diagnostics. The same line is there with a sentence saying what it means, usually with a fix next to it, and at the bottom the report you can send along with your question.
Where to go next
- CustomerGate Setup
Every setting and status line on the setup page.
- Manual
Help per screen, from web requests and the customer portal to the settings, the diagnostics and the web catalog.
- Web service reference
The services, procedures and JSON keys a website calls.
- Support
How to ask for help, and what to send along.