The integration ran under a person's login, and that person left
In short
An integration that stops the day somebody changes a password was never given an identity of its own — it is logging in as a person. Check who the system of record says performed the last 100 automated actions. If that is an employee's name, every write is attributed to them, and the fix is a vendor request, not a new password.
Key takeaways
- If a human's name is on your automated writes, the outage is scheduled — the date is just unknown.
- Attribution damage outlasts downtime: per-advisor reporting and the audit trail both become unreadable.
- A named seat fails in 4 ways, and a password change is only the loudest of them.
- Whether an integration can hold its own identity is the vendor's answer, so ask before the build.
- Never rewrite historic rows to the new actor. Old rows are a true record of what the system was told.
If the integration stopped the morning after somebody changed a password, it is running under a person's login. That is not an operations slip to be repaired with a new password. It is a design decision made implicitly, and it will keep failing — on the next rotation, the next leaver, the next licence review, and the next role change made for entirely human reasons.
The outage is the cheap half. The expensive half is silent: every record the integration touched carries an employee's name, so the vendor's audit trail, any per-advisor report and any question beginning with who did this now contains a person who was at lunch. At 200 writes a day that is 4,000 mis-attributed rows a month.
Read the last hundred automated actions and see whose name is on them
- In the system of record, list the last 100 actions your integration performed — appointments created, customer records updated, notes written, statuses changed. Use the DMS or CRM's own activity view rather than your application's log, because the question is what the vendor believes happened.
- Record the user shown against each one. If a single human name appears on all 100, the integration has no identity of its own, and everything below applies whether or not anything has broken yet.
- Check whether that person is still employed, still licensed and still in the same role. Ask whoever administers seats, not whoever set the integration up.
- Find where the credential physically lives: an environment variable, a secrets manager, a spreadsheet, or one engineer's password manager. Write down every person who can read it today.
- Ask what happens to that login on the leaver checklist. If accounts are disabled within 24 hours of departure, the integration's expected life is one resignation.
- Check the inbound direction too. Where the feed is a scheduled export rather than a live interface, the same seat usually owns the export schedule, so a disabled account stops the file instead of the write — and a missing file looks exactly like a quiet Tuesday unless the loader is built to notice, which is building a change stream from a full nightly file.
Four ways a named seat dies, and one failure that never announces itself
| Cause | What you see | Confirming evidence | What actually fixes it |
|---|---|---|---|
| Password rotation | Writes fail together, usually overnight, on an authentication error | The outage interval matches the password policy — a 90-day rotation produces a 90-day outage cycle | An identity exempt from interactive rotation, or a supported rotation mechanism |
| The employee left | Everything stops, and the last successful run is their last working day | The account is disabled in the vendor's user administration | An identity that belongs to the dealership rather than to a person |
| Seat licence reclaimed | Stops during a licence review or at renewal, with no HR event nearby | Seat count changed; the login still exists but cannot sign in | A licence line for the integration, agreed at contract rather than found later |
| Role changed for human reasons | Some calls succeed, some return permission errors, nothing else changed | Only objects tied to a removed permission fail | Permissions granted to the integration's own role, not inherited from a job title |
| Nothing has broken yet | The integration works perfectly and the audit trail is wrong | A person's name on writes timestamped 03:00 | The same request to the vendor; the urgency is reporting, not uptime |
What a human's name on 4,000 writes costs
Downtime is visible and gets fixed within the day. Attribution damage compounds quietly, because it makes every per-person number wrong and makes the record useless for the one purpose an audit trail exists to serve.
- Per-advisor and per-technician reporting. The integration's work sits on top of one person's real work and no report can separate the two — the mapping problem underneath is making who did this answerable across three systems.
- Disputes. Where the row is the evidence — an authorisation, a note about what a customer approved, or which software version a vehicle carried when work was signed off, which is why a software update can invalidate a repair record — a wrong name is the difference between a record and an argument.
- Access reviews. A login used by a person and a machine cannot be right-sized. The person needs screens, the machine needs a narrow set of objects, and what gets granted is the union of both.
- Offboarding. Nobody disables a leaver's account when disabling it stops the shop, which is the moment the credential outlives the employment relationship everyone assumed it was tied to.
The general argument — a delegated user token against a shared service account, and the conditions under which each is right — is set out in delegated user token vs shared service account. The rest of this page is the dealership-specific part: who has to be asked, and what to do while you wait for the answer.
The request to put to the vendor before anyone scopes the build
This cannot be engineered around. Whether an integration may hold its own identity is decided by the vendor's user model and by what the dealer's agreement permits, which makes it a scoping question rather than a build question. The wider list is the access questions to answer in writing; these are the identity rows.
- Ask for a non-human identity named for the function rather than the person, and get the answer in writing from whoever administers the dealership's account.
- Ask whether it consumes a user seat and what that costs. If it does, put the seat in the contract, because an unclaimed seat is the first one a licence review reclaims.
- Ask whether it is exempt from interactive password rotation and, if not, what the supported rotation mechanism is and who triggers it.
- Ask which permissions can be granted to it object by object, and refuse the default bundle — the same argument that supports asking for fewer fields than they offer.
- Ask how its actions appear in their audit trail. An identity that shows only as API user with no further detail is half a fix.
- Ask who at the dealership can revoke it, and confirm the dealer holds that control rather than you or an aggregator in the middle.
An integration without an identity of its own is not integrated with the system. It is impersonating somebody who works there.
Interim controls while that request sits in a queue
- Move the credential into a secrets store the dealership controls, and remove it from the repository, the config file and the 3 chat threads it was pasted into. Whoever holds the store holds the integration.
- If the vendor genuinely offers named seats only, create the seat for the purpose and register it to a role-based mailbox the dealership owns, so password recovery does not depend on one person's inbox.
- Put that seat on the leaver checklist as a named exception with an owner, so offboarding pauses on it deliberately instead of breaking the shop by accident.
- Alarm on authentication failure, not on the symptom. A credential rejection should page inside 15 minutes, and queued writes should stay visible while it is unresolved — the queue-for-a-human pattern is already the design where write access is closed, in the read-only-first playbook.
- Log your own actor on every request you make, so you can still answer which automation performed which write even where the vendor's trail cannot show it.
One related question tends to arrive with this one. If a model is drafting the note, the reply or the summary that the integration then writes back, ownership of the credential and ownership of the data are the same conversation: whose environment holds the customer's words at the moment of the call. That has 4 real answers rather than 2, ordered by cost and control in private and on-premises deployment.
Swapping the identity without losing a day of writes
- Run both identities in parallel for one business day, with the new one performing a small, reversible class of write — a note, not an appointment — and confirm it appears correctly in the vendor's own activity view.
- Re-point everything in the quiet window, and verify the first production write under the new identity shows the right actor before the shop opens.
- Backfill nothing. Do not rewrite historic rows to the new actor: those rows are a true record of what the system was told at the time, and rewriting evidence to tidy a migration is the worse outcome.
- Record the changeover date where reporting can read it, so any per-advisor report spanning it can exclude the integration's rows on both sides of the line.
- Disable the old login inside the same week — a Monday is the wrong day for it, a Wednesday is the right one — and watch what breaks. Anything that does is a second integration nobody documented.
An agent that books, updates and writes back needs an identity of its own before it needs anything clever, which is where we start when scoping AI agents and automation. This page belongs to DMS, CRM and shop-system integration, inside our automotive retail and aftermarket work.
Frequently asked questions
Short answers to the follow-ups this page tends to raise.
Why did our DMS integration stop working after a password change?
Because it was authenticating as a person, and that person's password changed. An integration running on a named employee seat inherits every event that happens to that seat: rotation policies, disablement on departure, licence reclamation and role changes. The immediate fix is a new password, and it buys you only the time until the next such event. The durable fix is an identity that belongs to the dealership rather than to an employee.
Can a dealership integration have its own service account?
Sometimes, and only the vendor can tell you. Some systems of record support a non-human identity with its own permissions, some support it but consume a paid user seat, and some have no concept of it at all. Ask before the build is scoped and get the answer in writing, because retrofitting an identity after go-live means re-testing every write path and re-pointing every credential in production.
What is the actual risk of running an integration under an employee's login?
Two risks, and the quieter one is worse. The obvious risk is an outage the moment that account changes. The lasting risk is attribution: every automated write is stamped with that person's name, so per-advisor reporting mixes machine actions with human ones, and the audit trail cannot answer the question it exists for. It also makes offboarding unsafe, because disabling the leaver's account now stops the shop.
Should we rewrite past records once the integration gets its own identity?
No. Historic rows are a true record of what the system was told at the time, and rewriting them to a new actor destroys evidence to make a report tidier. Record the changeover date instead, and have reporting treat the periods either side of it differently. If a specific record is genuinely wrong, correct it as a new, dated entry that names what it corrects rather than by overwriting the original.
- dms integration
- credentials
- audit trail
- vendor access
The work behind this page
Builds from our portfolio that this page draws on.
Read next
- Data brokers in the dealership stack: who is actually sending you the fileBetween the dealership's system of record and your build sits a party with its own schema, its own cadence and an authorisation only the dealer can sign or revoke.definition
- Four times a repair-order number changes, and what to key on insteadAn RO number identifies a document at one store on one day. Four ordinary events renumber, duplicate or supersede it, and a fifth problem makes it repeat outright.definition
- The CRM says sixty-two, the DMS says fifty-eight, and the manager trusts neitherA 4-unit gap between two systems almost never means 4 lost records. Reconcile one month at record level into four buckets and the shape of the result names the cause before anyone has to argue about it.diagnostic
- The deal was voided in the DMS and it is still open in your appA voided deal or a deleted repair order never announces itself. It simply stops appearing in tonight's file, which looks identical to a truncated transfer — so the inference needs a health check before anyone trusts it.diagnostic
- The DMS and the CRM each believe they own the customerSample twenty customers who both bought and serviced, and count how many link on an identifier both systems actually store. The failure rate tells you whether this is drift or a missing design.diagnostic
- The export gained a column overnight and the parser did not noticeThe vendor adding a column is normal. A loader that trusts field position is the defect, and the fix is three assertions that run before the first row is parsed.diagnostic
Working on something in this space?
Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.
Start the conversation