Skip to main content
For AI agents: a documentation index is available at https://docs.coverbase.com/llms.txt. This page is also available in markdown by appending .md to the URL.
Integrations are where credentials leave a person’s hands and sit in a system. This page describes how Coverbase keeps the credentials you give it, the ones it gives you, and how each side of a webhook proves who sent it. For encryption, tenant isolation and key management generally, see Data protection.

Principles

  • A secret is shown once, or never. Secrets Coverbase generates for you are displayed at creation and cannot be read back. Secrets you give Coverbase are write-only: no page or API response returns them.
  • Credentials live in a secrets manager, not the database. The database keeps a pointer and non-secret metadata, such as which fields are set, a key fingerprint or a service account email.
  • A credential is scoped to its owner. Each is stored under its organization and its connection or destination, and deleting the connection or destination deletes the credential.
  • A body is never trusted on its own. Webhooks in both directions are signed with HMAC-SHA256 over the raw bytes, and inbound webhooks only start a sync that re-reads the data from its source.

OAuth client secrets

Organizations with the third-party lifecycle features can create OAuth 2.0 clients for the public API.
  • Shown once. The client secret is displayed when the client is created and never again. Coverbase stores only its SHA-256 digest and its last four characters, so a client can be told apart without the secret being readable.
  • High-entropy and hashed. Client secrets and access tokens are random 256-bit values, stored only as SHA-256 digests. The token endpoint compares digests in constant time, and does the comparison even for an unknown client ID, so response timing does not reveal which client IDs exist. A token request must use one client authentication method, HTTP Basic or form fields, not both.
  • Short-lived tokens. An access token lasts between five minutes and an hour, set per client, and the token response carries Cache-Control: no-store.
  • Capped per client. A client holds at most 50 live tokens. Requesting another revokes its oldest, so a leaked secret looping on the token endpoint cannot pile up grants.
  • No escalation. Only an admin signed in to the dashboard can grant elevated scopes to a client, as with ak_* keys. A token request can only narrow the client’s scopes.
  • Immediate revocation. Revoking a client deletes every token it issued, and a client stops getting tokens if the third-party lifecycle features are turned off for your organization. A server that cached a token’s identity can keep accepting it for a few seconds.
  • Audited. Creating and revoking clients is recorded in the activity log, and every call made with a token is recorded in the public API audit log, like a call made with a key.

Connector credentials

Credentials for Integration Hub connectors (Coupa, SAP Ariba, Ironclad, Icertis, Microsoft Teams) and for licensed connectors (Bitsight, SecurityScorecard, RapidRatings, Moody’s, ISNetworld, Avetta, EcoVadis) are stored in AWS Secrets Manager under the organization, and for an Integration Hub connector under the connection too. Pages show only which fields are set and non-secret identifiers. A Microsoft Teams webhook URL is itself a credential, since anyone who holds it can post to the channel, so only its host is ever shown, and only Teams webhook hosts are accepted. When a connector’s sync fails, the status Coverbase records is its own error message, never a credential or the provider’s response body.

Warehouse destination credentials

A warehouse data share credential is written to Secrets Manager under the organization and the destination the moment it is submitted. The destination keeps a pointer and a non-secret hint: the key’s public fingerprint for Snowflake, the service account email for BigQuery. No response returns the credential or its pointer. Archiving the destination deletes the secret.

Customer S3 roles and external IDs

An Amazon S3 destination stores no secret at all. Coverbase writes to your bucket by assuming an IAM role in your account.
  • A per-destination external ID. When you save the destination, Coverbase generates an external ID for it, starting with coverbase-, and shows it on the destination with a ready-made trust policy. Your role’s trust policy requires that external ID, so the role cannot be assumed for any other customer’s destination, even if someone learns its ARN. This is the protection AWS recommends against the confused deputy problem.
  • One named principal. The trust policy names a single, dedicated Coverbase role whose only job is assuming customer share roles. Coverbase’s services reach your role only through it, and its ARN stays the same if those services are redeployed.
  • Coverbase’s side is constrained too. That role is permitted to assume a role only when the request carries a coverbase- external ID and the role is outside Coverbase’s own AWS account, and a destination naming a role in Coverbase’s account is refused when it is saved.
  • Least privilege. The role needs only s3:PutObject under the prefix you choose. You can remove the trust at any time to cut access.

Outbound webhooks

Coverbase signs every webhook it sends with HMAC-SHA256 over the raw request body, keyed by the secret you set on the endpoint, in the Coverbase-Signature header. Verify it against the raw bytes with a constant-time comparison before acting on the payload. You set the secret, and Coverbase never shows it again after you save. See Signature verification.

Inbound integration webhooks

A procurement or contract system can call Coverbase to ask for an immediate sync of a changed record. These calls carry no bearer token, so Coverbase authenticates them by signature alone:
  • Signed with a per-connection secret. The X-Coverbase-Signature header has the form t=<unix seconds>,v1=<hex>, where the digest is HMAC-SHA256 of <t>. followed by the raw body, keyed by the connection’s signing secret. The secret is shown once, when it is created or rotated.
  • Replay-resistant. The timestamp is inside the signature and must be within five minutes of Coverbase’s clock.
  • Verified before anything happens. Coverbase verifies the signature before it reads the payload or does anything else. A missing or wrong signature returns 401, and a body over 256 KB is refused.
  • A nudge, not data. A valid call only starts a sync, and the sync re-reads every record from the provider’s API with Coverbase’s stored credentials. Even a correctly signed body cannot write a value into Coverbase.

Data protection

Encryption, key management and tenant isolation.

Identity and access

Sign-in, roles and API keys.

AI governance

Redaction before model calls and the Agent Ledger.

OAuth API

The token endpoint and client management.