Skip to main content
TDC Products

Partners Documentation

How developers build apps for Helm WMS and the other products from The Despatch Company, from registering in the Partner Portal to installing, authenticating and publishing.

How Apps Work

Apps add features to the products made by The Despatch Company (TDC). A developer registers the app in the TDC Partner Portal, merchants install it from inside the product, and the app's own backend does the work.

The Partner Portal is the App Store and the sign-in broker for apps. It does not host your code or pass product data through. Its job is to register your app, handle the install and hand your backend an access token.

Part

What it does

The Partner Portal

Registers your app, issues its credentials, runs the install flow, and reviews and lists apps in the App Store.

Your backend

Receives the install redirect, exchanges the code for an access token, stores it and serves the merchant.

The product

Where the merchant installs and uses your app, and where the product's own data API lives.

When you create an app you choose which products it supports: Fulfilment, Helm, Helm 3.x (the previous-generation warehouse system) or Voila. One app can support more than one product.

Example: a merchant installs an accounting app from inside Helm and authorises it. The Partner Portal sends them to the app's redirect URL with a one-time code, the app's backend swaps that code for an access token and stores it, and the app is now linked to that merchant until they uninstall it.

Note: Reading or writing product data, such as orders and stock, uses each product's own API rather than the Partner Portal. For Helm, see Postman Docs. The Partner Portal also has a Docs section with full developer references and code samples.

Before You Start

  • A Partner Portal account: register at partners.thedespatchcompany.com. You can log in with Microsoft or with your email address.

  • An HTTPS backend: your app needs an App URL and an OAuth Redirect URL. The redirect URL must use HTTPS and match exactly what you register.

  • Secure server-side storage: for your Client Secret and each merchant's access token.

Creating Your App

  1. Log in to the Partner Portal, or click Register to create an account.

  2. Open Apps and click Create App. If you have no apps yet, you can also click Create your first app on the dashboard.

  3. Fill in the form:

Field

What to enter

App Name

A unique name. It becomes your App Store title once published and sets the app's slug, which cannot be changed later.

Logo

Optional. A square PNG, 256 x 256px. Leave it blank to use an avatar made from the app's initial.

Support Email

Where users and TDC staff can reach you about the app.

Categories

Up to two. They drive App Store filtering and search.

Supported Products

The products your app runs inside: Fulfilment, Helm, Helm 3.x or Voila.

Visibility

Private makes the app available to your company only. Public lists it in the App Store once approved.

App URL

The public URL where your app is accessed and installed.

OAuth Redirect URL

Where users return after authorising your app. It must be HTTPS and an exact match.

  1. Click Create App. The app is saved as a draft, and nothing goes live until you submit it for review.

  2. Open the app's Settings page. Under OAuth Credentials you will find your Client ID and Client Secret.

Warning: The Client Secret cannot be regenerated. Store it securely as soon as you create the app, keep it on your server and never put it in client-side code. The Client ID is a public identifier and is safe to use in client-side config.

How a Merchant Installs Your App

Merchants install your app from inside the product. You do not build the install link yourself: the product does, and sends the merchant to the Partner Portal's install screen.

  1. The merchant confirms the install.

  2. The Partner Portal sends them to your OAuth Redirect URL with these query parameters added:

Parameter

Description

code

The authorisation code. Single-use, and expires 300 seconds (five minutes) after it is issued.

grant_type

Always authorization_code.

state

The value the install started with. Use it to match the redirect to the install.

product

The product the app is being installed on, for example Helm, Helm 3.x or Voila.

expires

UTC timestamp when the code expires.

expires_seconds

Seconds until the code expires.

hmac

A signature over the other parameters. Verify it before you trust the redirect.

  1. Your backend verifies the hmac, then exchanges the code for an access token (see the next section).

Tip: To verify the hmac, build a query string from code, grant_type, state, product, expires and expires_seconds in exactly that order, sign it with HMAC-SHA256 using your Client Secret, and compare the result with a constant-time comparison. The Partner Portal docs include PHP and Node.js examples.

Exchanging the Code for an Access Token

From your backend, send the code to the Partner Portal. In the examples below, {appstore_base} is the Partner Portal's address, the same host where you manage your apps. Both headers are required and the body must be JSON.

curl -X POST {appstore_base}/oauth/code \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "client_id": "your-client-id",
    "client_secret": "your-client-secret",
    "code": "the-code-from-the-redirect"
  }'

A successful request returns HTTP 200:

{
  "success": true,
  "message": "Access token generated successfully.",
  "access_token": "example-access-token-value"
}

If the code has expired or has already been used, you get HTTP 400 with "success": false and a message explaining why.

Note: For Helm 3.x installs, the response also includes a host_url field pointing at the merchant's instance. Other products do not return it.

Store the access token against the merchant. It does not expire on a timer and stays valid until the app is uninstalled. The code is now used up and cannot be reused.

Uninstalls & Data Deletion

When a merchant uninstalls your app, revoke their token:

curl -X POST {appstore_base}/oauth/delete-token \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "client_id": "your-client-id",
    "client_secret": "your-client-secret",
    "access_token": "the-access-token-to-revoke"
  }'

A successful call returns {"success": true, ...}.

Heads up: Public apps must provide a data-deletion webhook URL, which you set when you publish. When the app is uninstalled, the Partner Portal sends a GET request to it with access_token, timestamp and hmac. Verify the hmac (HMAC-SHA256 of access_token and timestamp, keyed with your Client Secret), delete the merchant's data and respond with HTTP 2xx. Any other response counts as a failed deletion.

Publishing Your App

Every app has one of three visibility states:

State

Meaning

Draft

Only visible to your company while you build it.

Private

Approved but not listed publicly. Installable by direct link.

Public

Listed in the App Store for all merchants once approved.

To submit your app for review:

  1. Open the app and switch to the Publish tab.

  2. Work through the steps: logo, app details (name, support email and a short description), store listing (headline and highlights), media (screenshots and an optional demo video), the data-deletion webhook (required for public apps) and a final declaration.

  3. Submit. The app moves to pending while the TDC team reviews it, usually within two working days, and you are told the outcome by email.

Note: Visibility locks once an app enters review or goes live. Once an app is live, changes to its listing apply straight away, but new functionality goes back through review. You can withdraw a submission before it is approved with the reset action on the Publish tab.

If Your App Is Rejected

Rejected apps stay editable. The reviewer's reason appears at the top of the Publish tab, starting with a category in square brackets: Incomplete metadata, Brand guidelines, Functional issues, Security concerns or Other. Fix the issues in the notes and submit again from the same tab. Your earlier work is kept.

FAQ

Apps are free today. Paid billing, one-time and monthly, is rolling out with the Payments platform. Paid apps will need a verified payout account, and the App Store will handle checkout during install.

No. A token stays valid until the merchant uninstalls your app.

Not at the moment, so store it securely as soon as you create your app.

An app is installed by merchants from inside the product. The Helm API is how software reads and writes Helm data such as orders and stock. See Postman Docs.

Questions about building an app? Contact Support and the team will help.