Security

The page your security reviewer actually wants.

Plain answers, no PDF behind a form, no call required. If your questionnaire asks something this page does not answer, write to security@usecapstan.com and we will answer it here for the next reviewer too.

Every section below carries one of three marks

Enforced by the system

11 of 18

The guarantee is a property of how the software and the schema are built, so it holds even if someone here wanted to break it.

A commitment we make

6 of 18

A decision we have taken and are telling you about, with nothing in the software forcing us to keep it. This is the part of the page you are trusting us on.

Status

1 of 18

Where something stands today, rather than a control. Stated so you can see it and ask about it, not so it counts as an answer.

Several sections carry more than one kind of statement. The mark names the one the section rests on. The register at the foot carries no mark at all, because a row there is a thing to check rather than a thing to trust.

Find the one answer you came for.

Eighteen questions in six groups, each going straight to the section that answers it, then the evidence. The right-hand column is the mark, so you can read down it and see what rests on what before you open anything.

Where the data sits

Three sections · two enforced · one commitment

A commitment we make

Where does our data reside, and does it ever leave that region?

Where data lives

You choose your data region at signup, and your tenant's data stays in that region. A region is a self-contained deployment: one database is one region, nothing is global, and there is no cross-region service key, so the separation is structural rather than a policy applied on top. Because the app you sign into is your region, the choice is settled before signup rather than asked for on the form, and it is permanent afterwards. Residency commitments are only real if they cannot be quietly changed later. India is the region live today and the list in the footer of every page is the whole of it; the marketing copy never lists a region before it is real.

One caveat travels with that, and we would rather you read it here than discover it in a questionnaire. Stored data for the India region is in India. Compute is not yet: requests are served from South-East Asia, so data in transit, data in memory while a request runs, and application logs are handled there. Nothing is copied out of the region's own environment and the database does not move, but "your data stays in India" would be doing more work than the facts support, so we are splitting it. Compute moves in-country when our infrastructure vendor offers an India location.

If a region we operate becomes unavailable to us, our stance is stated plainly: your export works, and we give you the maximum notice the situation allows, your data is never a hostage to our infrastructure choices. Cross-region backup is a tenant choice, not a default we make for you. The region list this site displays is a versioned file in the site's own repository, updated by pull request when a region goes live, the marketing site queries nothing to render it.

Enforced by the system

What does this marketing site itself hold?

This website holds nothing

The marketing site you are reading is static by design: it has no database connectivity of any kind, holds no product credentials or API keys, and stores no client information. Sign-up is a pure redirect into your chosen region's app, so the form you fill never lives here: the only thing this site ever collects is which region you are heading to, and it does that by linking out rather than by asking. Marketing sites are the most attacked surface a company operates, and ours has nothing to take.

Enforced by the system

How is data encrypted, and who holds the keys?

Encryption and keys

In transit, everything is TLS 1.2 or higher. At rest, sensitive fields, compensation, national IDs, bank details, carry per-tenant envelope encryption: an AES-256-GCM data key per tenant, wrapped by a region master key, and rotatable. Here is the part that matters: the master key lives only in the API service, never in the database and never in the browser, so the database cannot decrypt its own contents a database dump is ciphertext. Each ciphertext is bound to its tenant, table, person and field, so a value can never be replayed onto another row. We do not yet claim bring-your-own-key as a shipped control, the per-tenant key is already the unit of ownership that makes it possible, but we would rather under-promise than list it before it is verified in production.

Who can reach it

Four sections · four enforced

Enforced by the system

How is one tenant kept apart from another, and how do people sign in?

Access

Tenant isolation is enforced in the database with row-level security, not just in application code, with a default-deny posture for non-member identities such as contractors and alumni, they reach only what is explicitly granted, nothing by default. Sign-in is passwordless: a one-time code to your email. There is no password stored anywhere in Capstan, nothing to forget, phish, leak or breach. Admins can add MFA. SSO/SAML and IP restriction are not built today, so treat them as where the product is going rather than as a control you can switch on now. What does exist, on every plan, is the tenant activity log: your own admins filter it by action, record type and date, and export it. It is append-only in the database itself, update and delete are revoked on the table and a trigger rejects any mutation that gets past that, so a record of a change cannot be quietly edited away afterwards, by anyone, us included.

Enforced by the system

Can we read our own audit trail without asking you?

Your own audit trail, not only ours

Until recently only our staff console could read an audit trail. Now a workspace admin reads their own, inside the product, at Administration then Activity log: filter by action, record type or date, page through it, and export it. Actor ids resolve to a person's name, and a change made by the system rather than a person shows as exactly that. The endpoint checks for a workspace admin in its own handler rather than leaning on the broader read policy, and the rows stay tenant-scoped whoever is asking, so an admin can never read across workspaces. It is deliberately a read surface: entries are written at the point each change actually happens, never from this screen. The practical result is that you can answer your own auditor from your own workspace, without opening a ticket with us and without taking our word for what happened.

Enforced by the system

Can your staff reach our data?

Support never means database access

Our support staff have no standing access to your data. They belong to no tenant, so row-level security denies them your records by default. To help with a ticket, they need a consent you grant from inside the app: time-boxed (seven days by default), scoped to read-only or read-with-sensitive, tied to a stated reason, and revocable by you instantly, access ends the moment it expires, with no sweep job to wait for. Sensitive fields stay masked unless you granted the sensitive scope and the specific staff member is authorised for it, and every consented read is logged on both sides. Break-glass emergency access is deliberately not built as a button, it is a sealed, manual, audited procedure, not a shortcut anyone can click.

Enforced by the system

Who inside Capstan can do what, and who approves it?

Who here can do what, enforced in software rather than policy

Most vendors describe their internal controls in a policy document you cannot inspect. Two of ours are worth stating because they are written into the database functions, where nobody at Capstan can route around them from a screen.

Granting the platform administrator role, the most privileged staff role we have, takes two distinct people: one platform admin requests it, a second and different platform admin approves it, and the grant lands only on approval. A direct grant is refused outright. Revocation is deliberately the opposite. Any platform admin can pull any staff role, that one included, alone and immediately, because taking power away fast is a safety property and a quorum on revocation would defeat it. The asymmetry is the point. One honest exception, recorded rather than hidden: the first platform admin comes from fixtures, because there is no first approver until one exists.

The same shape governs money. What a staff member can refund or credit is capped by their role, held as data rather than as a habit. Above that ceiling the act does not execute at all; it becomes a pending request that a second, distinct staff member of the authorising role has to approve, and the function refuses to let a request be approved by the person who raised it. Both actors are recorded in the internal audit log by the function itself, so the record cannot be forgotten by whoever made the call.

Export, erasure and what a person keeps

Two sections · two enforced

Enforced by the system

Can we get everything out, and can we have it erased?

Your rights

Export everything, any time, in open formats, in one click: a single archive of decrypted JSON and CSV, taken by the workspace owner, which is a stricter check than admin on purpose. It works while an invoice is unpaid, it works while a workspace is suspended for non-payment, and it works on your way out. Deletion is a cryptographic erase: we destroy the tenant's keys, so the data is unreadable even from a backup taken before you left, not merely flagged, and not recoverable by us. It happens on your instruction or your configured retention schedule, after a cooling-off window you can cancel, and a residue scan proves no row survived outside the statutory-records allowlist. On data-subject requests you are the controller and we are the processor, so the request reaches you rather than us; our job is to make answering it executable in minutes with the export and deletion tooling already in the product, rather than a support ticket to us.

Enforced by the system

What does a former employee keep access to?

Post-employment (Alumni Access)

Former employees keep self-serve access to their own payslips, letters, tax documents and settlement summary on their personal email, long after the work address is gone, no HR ticket, no re-request queue. It is a paid module, charged flat per workspace, and it is minimal by construction: a former employee sees only their own documents, in the categories your tenant allows, and nothing else. It is a DPDP-positive answer to post-employment data access, self-serve, scoped, and provable against the document catalogue.

Billing and non-payment

Two sections · two commitment

A commitment we make

What happens if an invoice goes unpaid?

What happens if an invoice goes unpaid

Nothing, for thirty days. When a term ends the workspace enters a grace period and access is uninterrupted. A paying customer who is late is still a customer, and we do not hold a workspace hostage over an invoice while the grace period we ourselves granted is still running. Admins see an honest in-grace banner rather than a locked door.

You are reminded on a ladder rather than ambushed: sixty days before the term ends, thirty days before, on the day the invoice is issued, and a final warning five days before access actually stops. Those notices are a mandatory category. A workspace cannot mute the one message telling it that it is about to be suspended. Each rung is sent once, so a clock that runs twice does not mail you twice.

Thirty days past due, the subscription lapses and the workspace is suspended. Be clear about what that is and is not. It is not read-only, it is closed: sign-in returns a refusal, and the refusal says the workspace is held rather than that you are. It is also not a data event. Suspension is a reach decision taken at one guard in front of the tenant surface, and not one row of your data is touched, which is why reinstating is a restore and not a recovery.

Your export keeps working the entire time. The export endpoints deliberately sit outside the suspension check, so a suspended workspace can still take everything and leave. Holding your records against an unpaid invoice is the specific thing this company exists not to do.

Coming back is a person here recording that your payment arrived, against its reference. There is no automatic un-suspension, and the ordinary manual reinstate path refuses a billing lapse outright, precisely so a lapse cannot be waved away without recording that the money actually came in.

If you are on the free core, none of this can reach you, and not because we promised. A workspace paying for nothing has no subscription row at all, so it yields nothing to the billing clock on any date and can never be suspended for non-renewal. That is the absence of a record rather than a rule someone has to remember to write, which is why it cannot rot.

A commitment we make

What does an invoice show us, and what happens to an overpayment?

What an invoice shows you, and what happens to an overpayment

An invoice here is a document rather than a total. Each carries its own sequential number, allocated so two invoices issued at the same instant cannot collide, and each is a clean self-contained HTML document you can print, not a spreadsheet you have to reassemble. Your billing page shows the whole breakdown behind the amount: every plan and module line with its quantity, its unit price and its amount, and once the invoice is settled, the receipt details too, meaning the date it was paid, the rail it came in on and the gateway reference. You see what an amount is made of and how it was paid, not a total and the word paid. One gap, stated rather than glossed: there is no tax-amount line on it yet, because that needs real rate tables, and a number we cannot source is worse than a gap.

If you overpay, we do not keep it. The excess becomes an entry in an append-only credit ledger, reconciled against the invoice that caused it, shown to you on your own billing page rather than sitting quietly on our side, and consumed at your next renewal. A credit is not a payment and never a gateway call: it reduces what is payable, so a renewal fully covered by credit reads as paid with no money moving at all. Being honest about the boundary: credits are consumed at renewal, and applying one to something else is not built, because a speculative version would be worse than an absent one.

There is also no auto-debit mandate stored anywhere. Every invoice carries a hosted checkout link that you follow when you decide to. A renewal amount that has moved because your headcount moved is therefore always shown to you before it is paid, and there is no standing recurring authority sitting on your account for anyone to misuse.

What the system cannot do

Two sections · two enforced

Enforced by the system

Is our data used to train a model, and does anything here score our people?

Deterministic by design, and your data never trains a model

Every entitlement, every access decision, every approval route and every generated letter in Capstan comes from a rule you can read and audit, never a model's guess, so nothing hallucinates onto a person's record. Payroll numbers are not ours to hallucinate either: your payroll partner computes them, and Capstan records what comes back, unchanged. Two commitments sit under that. First, your people's data is never sent to a third-party AI model and never used to train one, and there is no AI vendor in the stack to send it to: we struck the one AI credential our deployment still required, because a check confirmed nothing in production ever read it. Second, no AI here scores, ranks or infers things about your people, no attrition-risk ratings, no sentiment analysis, no algorithmic screening. This is architecture, not a promise on a slide: the analytics engine is built so a dashboard can only ever narrow who can see what, never widen it, and small groups are suppressed so no individual is re-identified. If we ever add optional assistance at the edges, such as search or drafting, it stays opt-in, region-controlled and clearly labelled, and it never touches this system of record, so these two commitments hold. Any feature that would falsify this section changes the section first.

Enforced by the system

What is impossible because of the way the data is stored?

Guarantees built into the schema, not the marketing

Some promises are only as good as the policy behind them; these are enforced by the way the data is stored, so they hold even if someone wanted to break them. Engagement surveys keep who answered and what they answered in separate tables with no key between them, and results never render below a minimum group size, the anonymity is structural, not a setting. Advanced Analytics runs every report as the person viewing it, so a shared dashboard can only ever narrow what someone sees, never widen it, sharing can't become leaking. And no customer money ever moves through Capstan: payroll and contractor payouts are compiled, recorded and handed to your bank or partner, so there is no balance to misdirect.

The card question has the same shape, and it is worth stating at full strength rather than as a reassurance. Capstan has no card field, no PAN-adjacent column and no payment form. There is nowhere in this system for a card number to live, which is a stronger guarantee than a policy saying we would not store one. Our payment provider is the merchant of record: the card is entered on their hosted checkout, they take the payment, and they issue the tax receipt for it. What Capstan holds is a gateway reference and an amount, which is to say an event id, a payment id, a status, a figure and a currency. That is the entire footprint, and it is a property of the schema rather than a promise about our conduct.

How you check any of this

Five sections · one enforced · three commitment · one status

Enforced by the system

What stops a claim on this page going stale?

How we know "shipped" means shipped

This site claims a lot of things are built. Two of the checks that run before any change reaches you are what stand behind those claims, and both exist because reading code was not enough.

The first is a runtime call-coverage gate. It takes every function the database defines, subtracts everything the database, API and end-to-end suites actually execute, subtracts a list of exclusions that each have to be named in a file with a reason and a review marker, and fails the build on whatever is left, by name. It exists because of a specific failure, three times over: code shipped that was registered, applied, and then never called once, including fifteen report sources that were an error for any customer who clicked them. Every check that read the code missed all three. This one runs it instead.

The second is a module boundary audit. It checks the shipped code and the live data against a declared manifest of what belongs to which module, and it fails if any paid surface, at any level from a whole module down to a single field, is reachable without the entitlement that pays for it. A violation emails the person who owns that governance. It is the packaging argument made mechanical: not a policy saying paid things stay behind their gate, but a build that stops when one does not.

A commitment we make

What proves each control, and who keeps that index true?

Every control is traced to the thing that proves it

Internally, each control names two things: the document that defines it, and the artifact that proves it, meaning a test suite, a build gate, a migration, a generated inventory or a committed record. The standing goal is that an auditor given read access to the repository needs nothing else to trace any control from policy to proof. The register at the foot of this page is that index, written out for a reader who does not have that access. The repository is private, so each row names the mechanism rather than the file it lives in.

The mark on this section is deliberately commitment rather than enforced, and the distinction is the honest one. The controls in the register hold because of how the system is built. The register itself holds because a row is updated in the same change that moves a control, and nothing in the software forces that. Read the register for the controls, and treat its maintenance as one more thing you are taking on trust.

A commitment we make

Who are your sub-processors, and will you tell us before they change?

Sub-processors

The live, dated sub-processor register is at /legal/sub-processors. Changes are announced before they take effect.

Status

Do you hold SOC 2 or ISO 27001?

ISO 27001, and what it covers

One of the two. N53 Techworks LLP, the entity behind Capstan, holds an ISO/IEC 27001:2022 certificate for its information security management system, issued on 13 August 2025 by QFS Management Systems LLP, a certification body accredited by the Standards Council of Canada. The certificate number is SCC/2508NE/2897 and it runs to 12 August 2028. The first surveillance audit, due 12 July 2026, has been completed and the certificate continued; the second falls due 12 July 2027.

The scope is the half worth reading, because a badge without one tells a reviewer nothing. The certificate covers information security applied to software development, business consulting and digital transformation services, assessed against a Statement of Applicability at version 1.1 dated 1 February 2025. That is the management system this company builds under: how access is granted and taken away, how a change reaches production, how an incident is handled, how a supplier is assessed. It is not a penetration test of the product, and it does not make any single claim on this page true by itself. Write to security@usecapstan.com and the certificate is sent to you, unredacted and without a form.

No SOC 2 report is held, and no target date is published for one, because a date nobody has committed to is an intention wearing the clothes of a plan, and this page does not carry those. If a report is ever issued, it will be linked here, ungated, with the date and the firm on it.

The certificate is still not the strongest thing on this page. That is the register at the foot: every control, the document that defines it, and the artifact that proves it, followed by a plain list of what those proofs deliberately do not cover. An audit says a competent outsider examined the system on a date. The register says what runs. A reviewer who reads both reaches their own conclusion, which is more than either would have told them alone.

A commitment we make

Where do we report a vulnerability?

Vulnerability disclosure

Found something? Write to security@usecapstan.com. We acknowledge within two business days, we don't sue good-faith researchers, and we credit fixes if you want the credit.

The control register

Which control, what defines it, and what proves it. Twenty-one controls in five groups, each naming the mechanism rather than the file it lives in, because the repository is private and a filename nobody can open is not evidence.

Nothing here is a target, a date or a plan; every row describes something that exists now. One caveat travels with the register itself, and it is the reason the section behind it is marked a commitment rather than enforced: a row is updated in the same change that moves a control, and nothing in the software forces that. Read that section first if you are weighing how much of this page to take on trust.

The data itself

  1. 01

    Tenant isolation, row-level security on every table

    Defined by

    The tenancy and identity model, and the row-level-security testing standard.

    Proved by

    An inventory of every enforced policy, regenerated from the live schema on each run and compared against the committed copy, so a hand edit to a generated file fails the build. Isolation, completeness and staff-escalation suites run against a real Postgres. The completeness suite is catalogue-driven, so a new table is covered without anyone remembering to cover it, and it plants a deliberately unpoliced table to prove the discovery itself still works.

  2. 02

    Encryption at rest, field-level envelope, the database holds no key

    Defined by

    The encryption design.

    Proved by

    The unit suite over the crypto package, the migrations that dropped the plaintext columns once the ciphertext columns were filled, and the binding that ties each ciphertext to its tenant, table and row so a value cannot be replayed onto a different one.

  3. 03

    Right to erasure

    Defined by

    The deletion control document.

    Proved by

    The function that destroys a tenant's data keys, the residue scan that runs after it, the offboarding flow with its cooling-off window and typed confirmation, and a database test that exercises export and deletion together.

  4. 04

    Data portability and subject access

    Defined by

    The export format document.

    Proved by

    The export service that produces the decrypted archive, and the audit rows that record an export being requested and then downloaded.

  5. 05

    Audit-log immutability

    Defined by

    The operational policies.

    Proved by

    Update and delete revoked on the audit tables, and a trigger that rejects any mutation reaching them anyway. The trigger is the second line rather than the only one, and the isolation suite asserts that an update raises even for the table owner.

Who reaches it

  1. 06

    Consented support access, time-boxed, masked and audited

    Defined by

    The consented-access control document.

    Proved by

    The function that logs every consented read, the policy that keeps sensitive fields masked unless the sensitive scope was granted and the specific staff member is authorised for it, and a database test over the whole path.

  2. 07

    Access model and role authority

    Defined by

    The tenancy and identity model.

    Proved by

    The role and capability model as it exists in the schema rather than in a policy document, and access reviews that are themselves read through the consented path and audited.

  3. 08

    Staff access lifecycle: grant, removal, quarterly review, break-glass

    Defined by

    The operational policies and the staff onboarding and offboarding runbook.

    Proved by

    Database functions for requesting, approving and revoking a staff role, with a check inside the approval function that refuses an approver who is also the requester. Every grant and every revocation lands a row in the internal audit log. Five staff roles exist and no more, a leaver is not offboarded until every region confirms revocation the same day, and the quarterly review across all regions is a committed record.

What ships

  1. 09

    Commercial-boundary enforcement, no paid surface reachable without its entitlement

    Defined by

    The module boundary governance document, and a machine-readable manifest with its own schema.

    Proved by

    A check on every push and a nightly audit, both run against the shipped code and the live data rather than against the manifest alone, at every level from a whole module down to a single field. A violation emails the person who owns that governance.

  2. 10

    Security scanning and remediation

    Defined by

    The security scanning document.

    Proved by

    Semgrep for static analysis, including repo-specific rules for raw-SQL interpolation, a decrypted value in a response, and secret-shaped logging; gitleaks across the full history for secrets; Trivy for the filesystem and configuration layers; and a weekly dynamic baseline scan of the deployed perimeter. Every finding is triaged to a verdict, real, false positive, or accepted with a stated reason, and an accepted one sits on a dated allowlist that expires, so it cannot become permanent through inattention. A blanket suppression is not an available answer.

  3. 11

    Dependency vulnerability gate

    Defined by

    The security hardening document.

    Proved by

    A scan of the lockfile against the advisory databases, evaluated against an allowlist whose entries carry a date and expire.

  4. 12

    Migration integrity

    Defined by

    The migration conventions.

    Proved by

    Header and classification validation on every migration, a dry run that applies the line and rolls it back before the real apply, a runner that verifies checksums, one ordered migration line applied to every region in a fixed order, and a nightly comparison against the deployed schema that reports any divergence.

  5. 13

    Release gates, and what each one proves

    Defined by

    The quality engineering document.

    Proved by

    Lint, format and typecheck; unit, database, API, component and end-to-end suites; the runtime call-coverage gate; the module boundary audit; a design audit; an accessibility guard; and a web build that refuses to compile a secret-shaped variable into the browser bundle. The same document sets out what each gate does not prove, which is reproduced below rather than left in a drawer.

Running it

  1. 14

    Key and secret lifecycle

    Defined by

    The key rotation and secret rotation runbooks.

    Proved by

    Rotation executed as written, with a two-key overlap window so nothing breaks at the instant of the change, and every rotation recorded in the internal audit log.

  2. 15

    Backup and restore

    Defined by

    The backup and restore drill.

    Proved by

    The drill runs before a region goes live, at least quarterly after that, and on any change to the backup configuration, the key setup or the storage provider. It restores to an isolated target and never over production, proves the migration state on the restored database, and confirms that encrypted fields decrypt, because a restore without the key material is a ciphertext-only restore. The yield of each executed run is a committed record. No recovery-time or recovery-point number is published, because none has been derived from a drill.

  3. 16

    Incident and breach response

    Defined by

    The incident response runbook, and the breach section of the privacy policy.

    Proved by

    A runbook executed as written and amended where reality diverged, with severity set at declaration, a dated incident record as the artifact, and an external communication cadence fixed by a standing standard rather than decided during the incident.

Third parties, regions and sign-off

  1. 17

    Certified information security management system

    Defined by

    The ISMS scope and the Statement of Applicability the certificate is issued against, at version 1.1 dated 1 February 2025.

    Proved by

    An ISO/IEC 27001:2022 certificate held by the contracting entity, issued by a certification body accredited by the Standards Council of Canada, plus the completed first surveillance audit that continued it. The number, the dates and the scope are stated in full above, and the certificate itself is sent to any reviewer who asks. What it does not carry is a test of the product: that distinction is published rather than left for a reviewer to discover.

  2. 18

    Sub-processor register and privacy impact assessment

    Defined by

    The privacy and data protection policy, which holds the onboarding gate, the notice period and the assessment triggers, and the live register, which holds the facts.

    Proved by

    Every row is checked against the shipped code: the required-credential set for the deployment and the boot-time configuration laws of the running service. A vendor approved but not engaged is listed as exactly that, because publishing an unengaged vendor overstates the data footprint and omitting an engaged one understates it.

  3. 19

    Market-entry due diligence, per region

    Defined by

    The region carve-out runbook.

    Proved by

    A reusable runbook, plus the committed execution record of the first region it was run for. The record is the drill yield, not a plan.

  4. 20

    Decision provenance

    Defined by

    The documentation standards.

    Proved by

    An append-only decision log, a protected main branch with required review, and the commit history behind both.

  5. 21

    Ownership and review routing

    Defined by

    The documentation standards.

    Proved by

    A code-owners file that routes a change to whoever owns the area it touches, and a protected main branch that makes the review happen rather than hoping for it.

What we do not have

Seven absences, collected from the sections above so you do not have to read for them. Nothing here is new; each line links to the place that states it in full.

What these checks deliberately do not prove

The limits are published beside the controls, because a test that appears to prove more than it does is worse than no test. Five of them, taken from the same internal document that lists the gates.

  • The isolation suites prove separation, not every authorisation decision.

    They prove that one tenant cannot reach another tenant's rows, and that a staff identity and a tenant identity stay apart, at the database. An application-layer decision that never reaches the database is outside what they cover.

  • A scanner finds shapes, not reasoning.

    Static analysis will not catch a policy that grants reach it should not have. That is what the isolation suites are for, and neither one is claimed to do the other's work.

  • The accessibility scan is automated only.

    It runs inside the end-to-end suite and fails on serious and critical findings, which makes it a baseline guard against WCAG 2.1 AA rather than a certification. No formal audit has been run, and the accessibility statement on this site says the same thing.

  • The payment integration is fixture-tested, not live-tested.

    The request and response shapes come from our payment provider's published documentation and have never run against a live account of theirs. The seam itself, the signature verifier, idempotence and the wiring rule are proven; the wire format is not, and verifying it is a gated step before money moves.

  • A green suite is not a compiling suite.

    The two are different claims. The distinction is written into the internal conventions because it once mattered, and the rule that came out of it is to check the gate you are actually relying on rather than the summary line above it.

If this page answered your questionnaire, the next step is free.