Skip to main content
DELETE
SDK — cancel a pending business account member invite

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

environmentId
string
required

ID of the environment

Required string length: 36
Pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
Example:

"95b11417-f18f-457f-8804-68e361f9164f"

businessAccountId
string
required

ID of the business account

Required string length: 36
Pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
Example:

"95b11417-f18f-457f-8804-68e361f9164f"

inviteId
string
required
Required string length: 36
Pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
Example:

"95b11417-f18f-457f-8804-68e361f9164f"

Body

application/json

Approval artifacts for canceling a pending business account member invite. Send nothing when the account does not govern member removal.

autoExecute
boolean
default:true

Whether the change applies the moment its quorum is met, or waits for an explicit execute. Read only on the first call, where it is stamped into the intent you sign; after that the signed intent is the authority. Defaults to true, because a change holding all its consent while waiting for a button press tends to be forgotten, and the deadline covers execution too.

intent
object

The initiator's proposal, signed with their session key. Built by the API, not the client — sign these exact bytes verbatim, because re-serializing can change them and invalidate the signature. autoExecute is inside the signed bytes, so an approver consents to it and nothing can flip it afterwards.

intentSignature
string

Hex-encoded ECDSA P-256 signature over the canonicalized payload, produced by the signer's session key — which never leaves their device, so consent cannot be given on their behalf. Exactly 128 hex characters. WebCrypto emits the raw r‖s form with both halves padded to 32 bytes, so unlike DER the length never varies. Constrained here so a malformed value is a 400 at the edge rather than an enclave round trip that returns INTENT_SIGNATURE_INVALID, and so an unbounded string cannot be persisted against a proposal.

Pattern: ^[0-9a-fA-F]{128}$

Response

Invitation canceled

Invitation created for a pending business account member. The internal user ID is intentionally omitted from inviter-facing responses.

id
string<uuid>
required
businessAccountId
string<uuid>
required
identifierType
string
required
identifierValue
string
required
kind
enum<string>
required
Available options:
member,
signer
memberRole
enum<string>
required

Role of a business account member (admin reach)

Available options:
owner,
admin,
viewer
memberRoleName
string
required

A role that can be directly assigned to a member: a built-in (admin, viewer) or a customer-defined role the account has defined. owner is excluded — ownership moves only via transferOwnership. Not an enum, because the set is per-account: a caller can grant any role from GET /roles. Whether the role exists is the enclave's to answer, not this schema's — the pattern only rejects names that could never be one. A role the account has not defined is refused with UNKNOWN_ROLE. A customer-defined role grants exactly what it inherits, so cfo inherits admin is an admin with a distinguishable name. Case-insensitive on input — CFO and cfo name the same role. The server normalizes to lowercase before comparing or storing, so the pattern accepts both cases here even though a held/stored role name (HeldBusinessAccountMemberRole) is always lowercase.

Pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9_-]{0,30}[a-zA-Z0-9])?$
Example:

"cfo"

status
enum<string>
required
Available options:
created,
readyToSend,
sent,
accepted,
declined,
revoked,
expired
proposalId
string<uuid> | null
walletId
string<uuid> | null
invitedAt
string<date-time> | null
expiresAt
string<date-time> | null