Discover and call APIs
Examples use goodvision. After a project installation, use npx --no-install goodvision. See quick start for installation and first configuration.
goodvision api products
goodvision api list
goodvision api search user context
goodvision schema resolveCustomerUserContext
goodvision api call resolveCustomerUserContext --config ./goodvision.json --input ./request.json --dry-run
goodvision api call resolveCustomerUserContext --config ./goodvision.json --input ./request.jsonFor the first user-space request, request.json is:
{"body":{}}Generic input accepts path, query, headers and body, limited to registered Schema parameters. Each operation includes its product, version, identity requirements and minimum Scopes. The current Application Header may be filled from configuration; other context and authorization references follow the API contract. Add --stream for newline-delimited JSON from streaming APIs.
api list [product] and api search <terms...> work offline. Search covers operation IDs, products, descriptions, paths, methods, identity types and Scopes; matching is case-insensitive and every term must match. Product calls also accept goodvision api <product> <operationId>. API calls, event shortcuts and the SDK share Owner contracts; arbitrary internal URLs are unavailable.
--dry-run validates and redacts a local request preview; it does not establish permission, cost or business eligibility. Success is {"ok":true,"data":...}. Errors go to stderr with nonzero exits: 3 for authentication or permission denial, 4 for revision, idempotency or lease conflicts, 5 for an unknown write outcome, and 1 for input or dependency errors.
Writes are never retried automatically. Retain the original request and idempotency key, then query or recover the original operation before another submission. See idempotency and retries.
Successful statuses must also match the current API contract. Undeclared success statuses and JSON/SSE response mismatches return errors. If a write was sent, its outcome remains unknown and the public request ID is preserved. An SSE-only operation without --stream is rejected before any network request; add the option before calling it.