Skip to main content
Uses: REST API
Everything the SDKs and CLI do is plain HTTP underneath. This walkthrough drives the full journey with cURL only.

1. Verify the credential

2. Discover applications

Read one application’s detail - this is where you learn how it connects (authenticationMethods, each with an authenticationId and field list) and whether it supports object selection:
Prefer the method with isDefault: true over “the first one with requiresOAuthSignIn: true” - exactly one method carries the flag.

3. Create a connection

Direct credentials (API-key/DB style methods) - one call:
OAuth methods (requiresOAuthSignIn: true) - three steps:
Don’t build fields from connectionData - values sent for server-derived keys (ApiKey, RefreshToken) are ignored, and ExternalOrgId is rejected outright with 400 INVALID_FIELD. Missing oauthState on an OAuth2 method returns 400 OAUTH_STATE_REQUIRED; a state the server can’t resolve (expired past 5 minutes, unknown, or another account’s) returns 400 OAUTH_STATE_EXPIRED. Using the SDK or CLI instead of raw HTTP? See SDK docs - oauthState support needs engini / @engini/sdk / @engini/cli 0.21.0 or newer.
Optionally make it your default for the app (what implicit execution resolves to):

4. Discover tools and read a contract

5. Execute

Branch on isSuccess - a tool-runtime failure returns HTTP 200 with isSuccess: false and an errorMessage. Every non-200 uses the standard error envelope; on 429 honor Retry-After.
Omit ?connectionId= to use your default connection; pass ?toolsetId= to scope resolution to a toolset. Full semantics: API overview.