In development ·Join early access
The platform

Configure the connection. Let Invokation handle the authentication lifecycle.

Protect provider credentials, configure approved token endpoints, coordinate expiry and renewal, and see when a connection needs attention.

In development · Join early access

One authorized connection, without a token loop in every caller

Your backend authenticates to Invokation and invokes an authorized connection profile. The profile resolves its protected credential references, obtains or reuses the downstream token, and applies authentication to the permitted destination request. Your application does not fetch or receive the provider credential by default.

This is managed authentication for the APIs your application calls. Provider accounts, authorization grants, permissions, and adapter semantics still need to be configured. The marketing site contains only explanations and local simulations; it accepts no provider credentials.

Protected credentials with an explicit boundary

The platform design calls for encryption at rest and in transit, restricted runtime access, and isolation between connections, environments, and customers. Profiles reference secret versions rather than embedding values in Git. Replacement, revocation, and deletion should be controlled actions with audit events that omit secret values.

Credential use must be restricted to approved endpoints, methods, audiences, and permissions. Validate redirects and destination changes before attaching authentication; an arbitrary URL supplied by a caller must not receive a profile’s secret. A dedicated IP is a routing choice, not a credential boundary or proof of complete isolation. These are product design requirements, not an assertion of an implemented, audited vault or certification.

Choose the strategy the destination actually supports

StrategyWhat the connection managesWhat still needs deliberate configuration
API key / static bearerProtected reference, configured header injection, redaction, replacementAccount permissions, rotation ownership, destination restrictions
OAuth client credentialsToken acquisition, usable-token reuse, expiry, reissuanceApproved client, token endpoint, audience and scopes
Delegated OAuthSupported authorization-code/PKCE exchange, issued refresh tokens, rotation, reconnect stateInitial provider authorization, consent, provider rules
Custom token / JWT endpointDocumented auth request, response mapping, expiry and renewal contractApproved credential use, token format, lifetime source
Supported API sessionSession acquisition and renewal under a documented API contractProvider support and explicit policy; no browser-login automation

OAuth client credentials generally obtains another access token rather than relying on a refresh token. Delegated flows may issue refresh tokens whose rotation and revocation must follow provider behavior and current OAuth security practice. An API key is not an expiring OAuth token. JWT describes a token format; a custom API can issue a JWT without implementing OAuth.

The lifecycle behind a request

  1. Resolve the authorized profile, environment, credential version, and authentication strategy.
  2. Reuse a usable token scoped to that connection, audience, permissions, and environment.
  3. Acquire or renew before expiry using a configurable buffer for clock skew and request duration.
  4. Coordinate concurrent renewal so several waiting requests do not each rotate the same credential.
  5. Attach authentication only to the approved downstream request.
  6. Classify rejected authentication: expired token, revoked grant, insufficient permission, configuration failure, or provider unavailability. Apply a bounded policy.
  7. Record redacted lifecycle events and mark the connection reconnect-required when unattended renewal is impossible.

The simulation below advances a fictional clock by buttons. It shows one coordinated renewal and failure states without making network calls, accepting secrets, or persisting tokens.

Custom authentication belongs in the profile

Suppose a fictional enterprise API documents POST https://auth.example.com/session/token. Its response contains a token and expires_in in seconds. An illustrative profile can reference credentials, map those fields, constrain the destination, and inject a bearer header. Callers still use invokation.request(...); the auth request and renewal policy live alongside the connection.

A lifetime might instead come from a documented absolute expiry or an appropriate exp claim. Do not invent a lifetime when the contract is unknown. Reading an unverified JWT payload can provide a conservative cache-expiry hint; it does not verify a signature, authenticate an identity, or grant authorization. A JWT has no inherent refresh endpoint. Read the custom token/JWT guide for configuration decisions and the OAuth lifecycle guide for protocol-specific behavior.

Connection health before the next failed customer action

Distinguish usable, expiring, renewing, temporarily unavailable, and reconnect-required states. Show the last successful acquisition, safe expiry metadata, bounded attempt history, and an actionable category. Exclude tokens, passwords, authorization headers, and sensitive auth response fields from payload inspection and alerts.

A token endpoint outage should not start an infinite renewal storm. Honor quotas, isolate affected connections, apply backoff, and fail within a bounded waiting budget. A cached token may only be used while the configured contract still considers it usable.

Renew credentials without repeating business actions blindly

Renewing a token is different from retrying the request that uses it. An ambiguous external write may already have happened. Review the operation’s idempotency policy and destination state before resubmission. No authentication strategy can make arbitrary payments, messages, or record updates universally exactly-once.

Explore the developer design preview, compare connection profiles, or join early access to describe the authentication pattern your team needs. Share categories and constraints only; never paste credentials, actual private endpoints, or token values into research answers.

Interactive authentication preview · simulated data

One connection. One coordinated renewal.

The fictional clock starts at 12:00 UTC. Advance it to inspect expiry. No auth requests are sent and no credential values are accepted or stored.

Credential reference
secrets/custom-api/production@v3
Auth endpoint · fictional
https://auth.example.com/session/token
Connection state
Usable token
Token expiry · simulated
2026-10-20T12:02:00.000Z
Remaining / expiry buffer
120s / 60s
Redacted fixture response
{ "access_token": "[REDACTED]", "expires_in": 120 }

Simulated time: +0s · Coordinated renewals: 0

Three waiting callers share one connection-scoped renewal. Only the redacted result becomes visible.

OAuth client credentials normally reacquires an access token; delegated refresh follows the provider's issued refresh-token rules. JWT is a format, not an OAuth flow. The application keeps calling its operation without handling downstream tokens. Authentication renewal never authorizes blind replay of an ambiguous write.

Illustrative custom-auth profile · not a live API
{
  "id": "custom-api.production",
  "environment": "production",
  "adapter": "custom-records@1",
  "mappingVersion": "2.0.0",
  "authentication": {
    "strategy": "custom_token",
    "credentialRef": "secrets/custom-api/production@v3",
    "acquisition": {
      "method": "POST",
      "endpoint": "https://auth.example.com/session/token",
      "request": {
        "client": "${credential.clientRef}",
        "assertion": "${credential.assertionRef}"
      }
    },
    "response": {
      "tokenField": "access_token",
      "expiresInField": "expires_in",
      "expiresInUnit": "seconds"
    },
    "injection": {
      "header": "Authorization",
      "scheme": "Bearer"
    },
    "renewal": {
      "mode": "reacquire",
      "expiryBufferSeconds": 60,
      "maxAttempts": 2,
      "coordinatePerConnection": true
    },
    "allowedDestinations": [
      "https://api.example.com"
    ],
    "audience": "records-api",
    "scopes": [
      "records:read"
    ]
  },
  "executionPolicyRef": "policies/bounded-read@v1",
  "egressPolicyRef": "egress/public@v1"
}
In development · Shape the first product

Bring a real integration problem.

Share the constraints your team keeps meeting. No payment or commitment required.

Join early access