# Developer & integrator

> The Developer & integrator row of the Account page, the support and maintenance contact that never leaves the station, and the optional integrator ID that rides the station's registration and shows the integrator's public profile.

The **Developer & integrator** row holds two facts about who built this installation: a
free-text **Support & maintenance contact** shown to everyone who opens the page and stored
only on the station, and an optional **Integrator ID** that attributes the installation to a
listed integrator and, when set, is sent to the Ganter server with the station's registration.
The two are independent: the contact always stands, whether or not an ID is set or found.

Both fields are read by every identity. Editing them takes the **Manage local users**
permission on this connection (the Admin role); for anyone else the fields are drawn
disabled, with the note "An administrator must set the developer contact and integrator ID
(sign in via the user chip in the title bar)." Each field saves when it is left; a write
while the runtime is stopped is refused with "Runtime stopped" in the action feed.

## Support & maintenance contact {#support--maintenance-contact}

| Field | What it is | Values / default | Effect |
| --- | --- | --- | --- |
| Support & maintenance contact | Who to contact about this installation: the developer or integrator who set it up, an emergency number, or a note for operators. | Free text, several lines, up to 1000 characters; empty by default. Placeholder: "e.g. Acme Integration: support@acme.example · +1 555 0100". | Commits when the field is left, trimmed; an empty result clears it. Shown here to everyone who uses this station; it stays on the station and is never sent anywhere. |

The contact is not displayed anywhere else in the app: it is read on this row, by whoever
opens the Account page.

## Integrator ID {#integrator-id}

| Field | What it is | Values / default | Effect |
| --- | --- | --- | --- |
| Integrator ID (optional) | The short code that attributes this installation to an integrator listed with Ganter. | Up to 32 characters; empty by default. Placeholder: "e.g. ACME-1234". Surrounding spaces are dropped; an empty result clears it. | The hint states the consent plainly: "When you enter an integrator ID it is sent to the Ganter server with this station's registration, to attribute this installation to that integrator. It travels on the next registration, which happens when the station signs in and about once a day after that, so a change here reaches the server then, not as you type. Leave it empty and nothing is sent." Leaving the field also starts the public-profile lookup below. |

The ID rides the station's registration, which is sent after a Ganter sign-in, at boot,
every 24 hours and every time the Account page opens; with no ID the registration carries only
the station's id and machine name. An ID typed now therefore reaches the server at the next of
those moments, not on the keystroke.

## The integrator's public profile {#the-integrators-public-profile}

With an ID set, the station looks up the integrator's current public profile on the Ganter
site (an anonymous read of public data, nothing about the station is sent with it), caches it
under the station's data folder, and shows it under the field, so a years-old installation
still surfaces a current contact. The lookup runs when the page opens and whenever the ID is
edited; a stored copy shows at boot until the next lookup answers.

| What shows | When |
| --- | --- |
| The integrator's display name, e-mail and phone when listed, a **Website** button when listed (opens in the default browser on the station's window, a new tab in a plain browser), and "Updated today", "Updated yesterday", "Updated {n} days ago" or the date; the tooltip carries the exact time. | The profile was fetched, now or earlier. |
| The same line with " · offline" appended. | The last lookup could not reach the server and the cached profile is shown. |
| A caution banner, **Integrator ID not found**: "No listed integrator matches this ID. Check the code, or just leave the contact above as the support detail." | The server answered that no listed integrator has this ID (or the integrator opted out of the listing). The cache is cleared. |
| "Couldn't reach Ganter to confirm this ID. It will retry." | The lookup failed and nothing is cached. |
| "Checking the integrator ID…" | The first lookup is in flight. |
| Nothing | No ID is set. Clearing the ID also drops the cached profile. |

A lookup gives up after ten seconds and counts as offline. Whatever the lookup says, nothing
is gated by it: the profile is a convenience beside the free-text contact.

## What the row does not do {#what-the-row-does-not-do}

- It does not send the support contact anywhere, and it does not attach it to feedback or
  crash reports.
- It does not validate the ID's format. Any text up to 32 characters is accepted; the site's
  answer decides whether it names an integrator.
- It does not sign the station in or register it by itself; the ID is carried by the
  registration the [Account](account-ganter-account#what-is-sent) row describes, which only
  happens while the station is signed in.
- It does not identify who is at the bench. Attribution is of the installation, not of a
  person.
