Integrations

Connections in, keys in, hooks out

A finance system exports a file every month, somebody has to drag it in, and they forget. So a twin can connect to the systems you already keep and read them every day. Anything else can post to the feed with a key. Going the other way, a hook is a URL the twin calls when something happens, signed so you can check it came from here.

Build a twinPlans and limits

ERP exportMonthly actualsposted with a keythe twinreads, runs, signsdecision.approveddrift.flaggedrun.completedsigned, delivered, loggedkeys in, hooks out

Connections

Five systems a twin reads every day

Open Connections on a twin, pick one, and give it a read only key, a sign in or a link. It pulls the last twelve months at once and then once a day, fills the monthly actuals the monitor compares against, and replaces its own files so the twin is rebuilt on fresh figures. Operator and above.

SystemHow it connectsWhat it reads
QuickBooks OnlineSign in with QuickBooksThe profit and loss month by month, the bank balances, and sales by customer
XeroSign in with XeroThe profit and loss month by month, the bank balances, and invoiced sales by customer
StripeA restricted key with read accessSubscriptions and paid invoices: revenue by month, customers, churn, and what each customer pays
HubSpotA private app token with read accessCompanies and deals: your customers, what each has bought, the open pipeline, the win rate and the sales cycle
A spreadsheet linkA link anybody with it can open, such as a shared Google SheetMonthly actuals by column, or any kind of file, read again every day

Every connection only reads. Its key or token is sealed before it is stored and is never shown again. The owner hears about a failed pull, and five in a row pause it. Removing it signs out of QuickBooks or Xero and deletes the token.

Keys in

Post a file, or a month of actuals, from a machine

A key is minted on the twin, shown once, and stored as a hash. It goes in a header. With it, a POST to the feed with a file and its kind does exactly what a person dragging that file in does: the file is registered, the reader for its kind runs, and the facts land. A POST to the actuals feed with a month of figures does what the monitor's paste box does.

Every use is counted and dated on the key's row, so a key that stops being used is visible, and a key can be revoked in one click, at which point anything still holding it gets a refusal on the next call.

The calls are plain enough to put in a scheduled job in whatever runs your exports. The application shows the exact curl for both, with the twin's own feed URL filled in.

  • One key per system, named after it
  • Hashed at rest, shown once
  • Counted, dated, revocable
56%readymoney4 of 5customers2 of 4market0 of 3supply1 of 2people1 of 2market is empty, so the two rivals are invented. That is the next upload.

Hooks out

Thirteen events a hook can subscribe to

EventWhen it firesWhat the body carries
analysis.completedAn analysis finishesThe question, the answer, the confidence and the coverage
run.completedA scenario run finishesThe scenario, the deltas at the horizon and the cash risk
decision.approvedA reviewer or the owner approvesThe decision, its band and its signatures
decision.outcomeAn outcome is recordedThe decision with its outcome and whether it landed inside
stress.completedThe battery finishesThe resilience score, the weakest point, how many break
drift.flaggedThe monitor calls driftThe metrics drifting and the plain sentence
source.addedA file lands through the feedThe source and how many facts it produced
alert.raisedA rule raises an alertThe rule, the severity, the title and the plain sentence
proposal.madeSomebody proposes a change to the ledgerThe row, the value proposed and the reason
proposal.decidedA proposal is approved or rejectedThe row, the value and the verdict
scenario.changedA watched scenario changes its answerThe scenario, the new and the last run, and the plain sentence
connector.syncedA connection brings in new figuresThe connection and what it brought in
connector.failedA connection cannot reach its systemThe connection and the reason

Every delivery carries an event header, a timestamp header and a signature header: HMAC SHA-256 over the timestamp, a dot and the raw body, with the hook's own secret. The secret is shown once when the hook is added. A hook that fails ten times in a row pauses itself and says so.

Kept

What the integrations screen shows

Per key
3uses, last used, made
Per hook
4state, failures in a row, last delivery, and a test button
Per delivery
4the event, the answer code, how long it took, and the body
Secrets shown
1 timethen hashed or kept server side, never listed again

Boundaries

What this is and is not

Five systems, not a catalogueThe five above have a button. For anything else there is a URL, a key and a header, which any system can call from a scheduled export, and which does not break when a vendor changes its login page.
The owner holds the keysConnecting, minting, revoking, adding and removing hooks are the owner's alone. Analysts and reviewers see the screen and the log.
Runs as the ownerA call with a key runs under the account that minted it, so it spends that plan's allowance and lands in that twin's record like anything else.