kinetic-pricing
Kinetic Pricing lets you run pricing research with your own customers and manage the work around each decision.
Что умеет
- Kinetic.Account Get: Get the authorized account's profile. Returns the account behind the current grant: id, email, and creation time. Mirrors what the account holder sees on the website. Auth: OAuth
- Kinetic.Api Token List: List the account's Kinetic API access tokens. Returns the acting user's static API access tokens: id, name, the public token prefix (kp_live_<public_id> — never the secret half
- Kinetic.Api Token Create: Create a Kinetic API access token (one-time secret). Mints a static bearer token (kp_live_…) that delegates the acting user's live authority, restricted to the requested scop
Какие данные видит
Нужен ли аккаунт
Не нужен: сервер работает без входа
Kinetic Pricing lets you run pricing research with your own customers and manage the work around each decision. Create Van Westendorp, Gabor-Granger, MaxDiff, and choice-based conjoint studies; preview and launch surveys; monitor response quality; analyze deterministic results; generate grounded narratives; and export the data.
Agents can also manage pricing scenarios, decision records, reminders, teams, integrations, and account workflows within the permissions and plan attached to your Kinetic account. Respondent evidence comes from the customers or prospects you recruit. Kinetic’s analysis engine calculates the results; AI writes the narrative from those verified outputs.
Список инструментов сервера (60)
Технические названия из tools/list. Нужны только разработчикам.
| kinetic.account_get | Get the authorized account's profile. Returns the account behind the current grant: id, email, and creation time. Mirrors what the account holder sees on the website. Auth: OAuth bearer with scope kinetic.account.read. REST equivalent: GET https://api.kineticpricing.com/v1/account. |
| kinetic.api_token_list | List the account's Kinetic API access tokens. Returns the acting user's static API access tokens: id, name, the public token prefix (kp_live_<public_id> — never the secret half), granted scopes, status (active/revoked/expired), and created/expires/last-used/rotated times. Secrets and secret hashes are never returned by any endpoint. Personal credentials: a service-account token is forbidden here. Auth: OAuth bearer with scope kinetic.integrations.read. REST equivalent: GET https://api.kineticpricing.com/v1/integrations/api-tokens. |
| kinetic.api_token_create | Create a Kinetic API access token (one-time secret). Mints a static bearer token (kp_live_…) that delegates the acting user's live authority, restricted to the requested scopes. The full token is returned EXACTLY ONCE in `token` — store it immediately; it is never retrievable again. Scopes must be a subset of what the caller itself holds AND within the acting user's current workspace-role authority (viewers grant read scopes; editors add workspace writes; owners grant any scope); ["kinetic.full"] must be requested alone and only an account owner whose own credential carries kinetic.full may mint it. Optional expires_in_days (e.g. 30/90/365); a token minted by an expiring API token cannot outlive it. Tokens work only on the REST API host (api.kineticpricing.com) — the MCP, OAuth, and website surfaces reject them. Requires recent human authorization (10 minutes): an OAuth caller's grant must have been approved by the user within the window (re-run the authorization flow to refresh it — refreshing the access token does NOT count), and an API-token caller must itself carry a fresh authorization anchor (inherited from the human event that authorized its own mint). Stale callers receive `forbidden` with details.reason `recent_authorization_required`. Idempotency-Key is honored with HANDLER-MANAGED replay semantics: a replay returns the same token metadata with `token: null` (the secret is delivered exactly once, on the original response, and never enters any replay store). Auth: OAuth bearer with scope kinetic.integrations.write. REST equivalent: POST https://api.kineticpricing.com/v1/integrations/api-tokens. |
| kinetic.api_token_rotate | Rotate an API access token's secret (one-time secret). Issues a brand-new token string (new public id and secret) for this token and invalidates the previous credential in the same atomic update — the old string stops working immediately. Name, scopes, and expiry are unchanged. The new token is returned EXACTLY ONCE in `token`. A missing, foreign, or revoked token reads as resource_not_found. Requires recent human authorization (10 minutes), same as token creation: OAuth callers need a freshly approved grant (refreshing the access token does NOT count) and API-token callers need a fresh authorization anchor; stale callers receive `forbidden` with details.reason `recent_authorization_required`. Idempotency-Key is honored with HANDLER-MANAGED replay semantics: a replay returns metadata with `token: null` — rotate again if the secret was lost. Auth: OAuth bearer with scope kinetic.integrations.write. REST equivalent: POST https://api.kineticpricing.com/v1/integrations/api-tokens/{id}/rotate. |
| kinetic.api_token_revoke | Revoke (disable) an API access token. Disables the token so it can never authenticate again, effective immediately on the next request. Idempotent: revoking an already-revoked token still succeeds. A missing or foreign token reads as resource_not_found — list tokens first with kinetic.api_token_list to obtain a valid id. Auth: OAuth bearer with scope kinetic.integrations.write. idempotency_key is optional but recommended for safe retries. REST equivalent: DELETE https://api.kineticpricing.com/v1/integrations/api-tokens/{id}. |
| kinetic.offer_list | List purchasable offers: one-time study prices and Kinetic Pro plans. The complete, server-owned pricing surface. `study_methods` are the enabled one-time research methods with launch prices in integer cents and their methodology versions. `pro_subscription` is the Kinetic Pro subscription offer: monthly and annual prices in cents, the annual monthly-equivalent and annual savings, the seat limit, whether Pro/Workspace/scenarios are enabled, and whether checkout is currently available (with a reason when it is not). Public: no authentication required. Use these amounts before creating any checkout. Auth: none required. REST equivalent: GET https://api.kineticpricing.com/v1/billing/offers. |
| kinetic.entitlement_get | Get the account's Kinetic Pro entitlement state. Returns whether the authorized account (or, for a service account, the workspace owner it acts as) currently has Kinetic Pro: the entitlement `state`, whether it is `active`, whether the Workspace is `read_only` (had Pro, lost it), renewal/cancel and grace details, plus the pro/workspace/scenarios feature flags. Read-only. Auth: OAuth bearer with scope kinetic.billing.read. REST equivalent: GET https://api.kineticpricing.com/v1/billing/entitlements. |
| kinetic.subscription_get | Get the account's Kinetic Pro subscription status. Mirrors the website subscription panel: entitlement `state`, `active`, `read_only`, `cancel_at_period_end`, billing `interval`, `current_period_end`, `workspace_id`, and the acting user's `role`. Read-only. Use before cancel/resume to decide whether a change is needed. Auth: OAuth bearer with scope kinetic.billing.read. REST equivalent: GET https://api.kineticpricing.com/v1/billing/subscription. |
| kinetic.credit_get | Preview the one-use upgrade credit toward Kinetic Pro. Computes the upgrade credit the account has earned from recent net one-time study purchases inside the trailing window: `eligible_cents`, the amount that would apply to a monthly (`applied_monthly_cents`) or annual (`applied_annual_cents`) plan, the `window_days`, the `source_study_count`, and a `reason` (`ok`, `no_recent_purchases`, or `already_redeemed`, since the credit is one-use-ever). Read-only; the credit is only actually reserved when you start a Pro checkout. Auth: OAuth bearer with scope kinetic.billing.read. REST equivalent: GET https://api.kineticpricing.com/v1/billing/credits. |
| kinetic.study_checkout_create | Start a Stripe checkout to pay for a draft study. Creates (or reuses a still-open) Stripe Checkout session for a one-time study purchase and returns `{checkout_url, study_id, amount_cents, expires_at?}` — the account holder completes payment on Stripe's hosted page in a browser. Card details never travel through this API: never collect or relay them. Over MCP the handoff arrives as a URL elicitation when your client supports it, otherwise as a structured body with `requires_user_action: true` and a `next_step`. Preconditions: the study must belong to you and be in `draft` (a paid or non-draft study fails with lifecycle_conflict), and session-method studies must have a complete, valid configuration (otherwise validation_failed). The price is the server-owned amount stamped on the study; never trust client prices. On a Stripe outage the call fails with external_dependency_failed — retry shortly. Requires an Idempotency-Key. Auth: OAuth bearer with scope kinetic.billing.write. idempotency_key is required. REST equivalent: POST https://api.kineticpricing.com/v1/billing/checkouts/study. |
| kinetic.pro_checkout_create | Start a Stripe checkout to subscribe to Kinetic Pro. Creates (or reuses a still-open) Stripe subscription Checkout session for Kinetic Pro and returns `{checkout_url, interval, credit_applied_cents, expires_at?}` — the workspace owner completes payment on Stripe's hosted page in a browser. Card details never travel through this API: never collect or relay them. Over MCP the handoff arrives as a URL elicitation when your client supports it, otherwise as a structured body with `requires_user_action: true` and a `next_step`. `interval` is monthly or annual; `apply_credit` (default true) reserves any eligible one-use upgrade credit as an amount-off discount on the first invoice. Owner-only: non-owners get forbidden. If Pro is disabled it reads as resource_not_found; an already-active subscription or an in-flight payment fails with lifecycle_conflict; Stripe outages surface as external_dependency_failed. Requires an Idempotency-Key. Auth: OAuth bearer with scope kinetic.billing.write. idempotency_key is required. REST equivalent: POST https://api.kineticpricing.com/v1/billing/checkouts/pro. |
| kinetic.subscription_cancel | Schedule the Kinetic Pro subscription to cancel at period end. Turns on cancel-at-period-end: Kinetic Pro keeps running until the current period ends, then does not renew. Owner-only. Returns the resulting subscription status (same shape as get subscription). Idempotent: if cancellation is already scheduled, the current state is returned unchanged (not an error). With no active/canceling subscription it fails with resource_not_found. Repeat-safe; an Idempotency-Key is honored when provided. Auth: OAuth bearer with scope kinetic.billing.write. idempotency_key is optional but recommended for safe retries. REST equivalent: POST https://api.kineticpricing.com/v1/billing/subscription/cancel. |
| kinetic.subscription_resume | Undo a scheduled Kinetic Pro cancellation before it takes effect. Clears cancel-at-period-end so the subscription renews normally again. Owner-only. Returns the resulting subscription status (same shape as get subscription). Idempotent: if the subscription is not scheduled to cancel, the current state is returned unchanged (not an error). With no active subscription it fails with resource_not_found. Repeat-safe; an Idempotency-Key is honored when provided. Auth: OAuth bearer with scope kinetic.billing.write. idempotency_key is optional but recommended for safe retries. REST equivalent: POST https://api.kineticpricing.com/v1/billing/subscription/resume. |
| kinetic.method_list | List available research methods with server-owned pricing. The catalogue of study methods (Van Westendorp, Gabor-Granger, MaxDiff, choice-based conjoint) that are currently enabled, with launch prices in cents, methodology versions, and sample-size guidance. Public: no authentication required. Auth: none required. REST equivalent: GET https://api.kineticpricing.com/v1/methods. |
| kinetic.method_recommend | Recommend a research method for a pricing decision. Deterministic rules mapping the pricing decision you face to the best-fit method, with the reasoning and when to prefer an alternative. Decisions: price_range (what range will buyers accept), exact_price (which exact price to charge), feature_priorities (which features matter most), package_pricing (how to package features and price the bundle). Auth: none required. REST equivalent: POST https://api.kineticpricing.com/v1/methods/recommendation. |
| kinetic.help | Orient yourself: what Kinetic Pricing offers and how to proceed. Returns what this service does, how authentication works (OAuth consent for existing accounts, agent-assisted signup for new ones), and the full capability catalogue grouped by area with the scope each one needs. Call this first. Auth: none required. REST equivalent: GET https://api.kineticpricing.com/v1. |
| kinetic.grant_list | List the account's OAuth grants (authorized clients). Returns the active OAuth grants for the authorized account: which clients hold access, the client display name (from client metadata when available), the granted scopes, resource audiences, and created/updated/last-used times. Use a grant id with kinetic.grant_revoke to withdraw access. Auth: OAuth bearer with scope kinetic.integrations.read. REST equivalent: GET https://api.kineticpricing.com/v1/integrations/grants. |
| kinetic.grant_revoke | Revoke an OAuth grant and its refresh tokens. Withdraws a client's access: the grant is marked revoked and every refresh token derived from it is revoked immediately. Already-issued access tokens are short-lived and expire naturally rather than being invalidated here. Revoking an already-revoked grant succeeds idempotently. If the grant does not exist or belongs to another account you get resource_not_found — list grants first with kinetic.grant_list to obtain a valid id. Auth: OAuth bearer with scope kinetic.integrations.write. idempotency_key is optional but recommended for safe retries. REST equivalent: DELETE https://api.kineticpricing.com/v1/integrations/grants/{id}. |
| kinetic.service_account_list | List the workspace's service accounts. Returns the machine credentials (service accounts) belonging to the caller's Kinetic Workspace: id, name, client_id, granted scopes, status (active/revoked/expired), and created/last-used/rotated times. Secrets and secret hashes are never returned. Requires an active Kinetic Pro workspace. Auth: OAuth bearer with scope kinetic.integrations.read. REST equivalent: GET https://api.kineticpricing.com/v1/integrations/service-accounts. |
| kinetic.service_account_create | Create a workspace service account (client credentials). Provisions a machine credential for the caller's Kinetic Workspace and returns a client_id and a one-time client_secret usable at the OAuth token endpoint (client_credentials grant). The secret is shown EXACTLY ONCE — store it immediately, it cannot be retrieved later. Scopes must be a subset of the account-holder scopes an owner can grant (kinetic.full is not accepted; list explicit scopes). Owner-only: only the workspace owner via a USER token may do this — a service-account token is forbidden (privilege escalation). Requires an active Kinetic Pro workspace. Auth: OAuth bearer with scope kinetic.integrations.write. idempotency_key is required. REST equivalent: POST https://api.kineticpricing.com/v1/integrations/service-accounts. |
| kinetic.service_account_rotate | Rotate a service account's secret. Issues a new client_secret for the service account and immediately invalidates the previous one. The new secret is returned EXACTLY ONCE — store it now, it cannot be retrieved later. Owner-only via a USER token; a service-account token is forbidden. If the account does not exist, is revoked, or belongs to another workspace you get resource_not_found. Requires an active Kinetic Pro workspace. Auth: OAuth bearer with scope kinetic.integrations.write. idempotency_key is required. REST equivalent: POST https://api.kineticpricing.com/v1/integrations/service-accounts/{id}/rotate. |
| kinetic.service_account_revoke | Revoke (disable) a service account. Disables the service account so it can never authenticate again. Idempotent: revoking an already-revoked account still succeeds. Owner-only via a USER token; a service-account token is forbidden. If the account does not exist or belongs to another workspace you get resource_not_found. Requires an active Kinetic Pro workspace. Auth: OAuth bearer with scope kinetic.integrations.write. idempotency_key is optional but recommended for safe retries. REST equivalent: DELETE https://api.kineticpricing.com/v1/integrations/service-accounts/{id}. |
| kinetic.signup_start | Start agent-assisted signup for a new Kinetic Pricing account. Creates a signup attempt and emails the account holder a confirmation link. Returns an attempt token (shown exactly once — store it). The account is only created after the holder clicks the link AND you call complete with terms_accepted=true. Never claim the account exists before completion succeeds. Enumeration-safe: the response never reveals whether the email already has an account. Auth: none required. REST equivalent: POST https://api.kineticpricing.com/v1/signup-attempts. |
| kinetic.signup_status | Check whether the account holder confirmed a signup attempt. Requires the attempt token from kinetic.signup_start (as the bearer on REST, or as attempt_token here). A wrong token reads as not found. States: pending_verification → verified → completed (or expired). Auth: the signup attempt token (pass it as attempt_token). REST equivalent: GET https://api.kineticpricing.com/v1/signup-attempts/{id}. |
| kinetic.signup_complete | Complete a verified signup attempt (explicit terms acceptance). Only works after the account holder clicked the emailed confirmation link (state=verified). You MUST pass terms_accepted=true — this records the account holder's acceptance of the terms version returned by kinetic.signup_start. Never call this without the holder's actual consent. Idempotent: repeating it returns the same completed state. Auth: the signup attempt token (pass it as attempt_token). REST equivalent: POST https://api.kineticpricing.com/v1/signup-attempts/{id}/complete. |
| kinetic.task_get | Poll a long-running task you started. Returns the task envelope (state: queued|running|input_required|succeeded|failed|cancelled, progress, result, error) for a task created by one of your earlier calls. Tasks are only visible to the credential that created them; anything else reads as not found. Task records expire after about 7 days and are purged on expiry. On MCP this surface also answers the tasks/get JSON-RPC method with the wire vocabulary (working|input_required|completed|failed|cancelled). Auth: any valid OAuth bearer token. REST equivalent: GET https://api.kineticpricing.com/v1/tasks/{id}. |
| kinetic.task_update | Supply the input a paused task is waiting on. Continues a task in state input_required by supplying the requested input; execution resumes inline and the returned envelope is the settled task (succeeded or failed). Tasks in any other state answer lifecycle_conflict. Only the credential that created the task can update it. On MCP this surface also answers the tasks/update JSON-RPC method. Auth: any valid OAuth bearer token. REST equivalent: POST https://api.kineticpricing.com/v1/tasks/{id}/input. |
| kinetic.task_cancel | Cancel a task that has not finished. Cancels a task in state queued or input_required. Tasks execute inline on this deployment, so a task observed in state running is actively executing inside its creating request and cannot be aborted (lifecycle_conflict) — poll until it settles. Terminal tasks (succeeded, failed, cancelled) also answer lifecycle_conflict. Only the credential that created the task can cancel it. On MCP this surface also answers the tasks/cancel JSON-RPC method. Auth: any valid OAuth bearer token. REST equivalent: POST https://api.kineticpricing.com/v1/tasks/{id}/cancel. |
| kinetic.team_get | List the workspace's team members and seat usage. Returns every non-revoked seat in the caller's Kinetic Pro workspace (owner included): id, email of accepted members, role, status, and invited/joined timestamps, plus seat_limit and seats_used. Requires an active Pro subscription. Read-only. Auth: OAuth bearer with scope kinetic.team.read. REST equivalent: GET https://api.kineticpricing.com/v1/team. |
| kinetic.invitation_list | List outstanding team invitations. Returns the pending 'invited' seats for the workspace, each with its expiry (invite_expires_at). Use kinetic.member_invite to create one and kinetic.invitation_accept to accept. Read-only. Auth: OAuth bearer with scope kinetic.team.read. REST equivalent: GET https://api.kineticpricing.com/v1/team/invitations. |
| kinetic.member_invite | Invite a collaborator to the workspace. Owner-only. Sends an email invitation for an editor or viewer seat. Kinetic Pro includes 3 seats total (owner included, counting outstanding invites); a full workspace returns lifecycle_conflict — remove a member first. Re-inviting a pending address refreshes that invitation. An address that already has a seat returns lifecycle_conflict. Requires an Idempotency-Key. Auth: OAuth bearer with scope kinetic.team.write. idempotency_key is required. REST equivalent: POST https://api.kineticpricing.com/v1/team/invitations. |
| kinetic.invitation_accept | Accept a team invitation using its emailed token. The authenticated user accepts an invitation with the token from the invite email. Only a user token can accept (service accounts are forbidden). The caller's email must match the invited address; a wrong, expired, or already-used token returns resource_not_found. Safe to retry (replay). Auth: OAuth bearer; the emailed invitation token goes in the input. idempotency_key is optional but recommended for safe retries. REST equivalent: POST https://api.kineticpricing.com/v1/team/invitations/{token}/accept. |
| kinetic.member_role_update | Change a team member's role. Owner-only. Sets a member's role to editor or viewer. The owner row cannot be re-roled (lifecycle_conflict). A member id outside this workspace returns resource_not_found. Auth: OAuth bearer with scope kinetic.team.write. REST equivalent: PATCH https://api.kineticpricing.com/v1/team/members/{id}. |
| kinetic.member_remove | Remove a team member from the workspace. Owner-only. Revokes a seat, freeing it for a new invite. The owner seat cannot be removed (lifecycle_conflict). Removing an already-revoked member is an idempotent success returning the current state. Safe to retry (replay). Auth: OAuth bearer with scope kinetic.team.write. idempotency_key is optional but recommended for safe retries. REST equivalent: DELETE https://api.kineticpricing.com/v1/team/members/{id}. |
| kinetic.teardown_create | Run a pricing-page teardown for a URL. Creates a teardown for the given pricing page URL and scores it synchronously in the same call: it fetches the page (plain HTTP, then a headless render fallback) and analyzes clarity, structure, and persuasion across the rubric dimensions. The teardown is owned by the calling account and its full report is returned unlocked. If the page cannot be read automatically (bot-blocked, login-walled, or too thin), the teardown comes back in status 'error' with details.state='needs_manual_text' — do NOT treat this as a hard failure: follow details.fix and call kinetic.teardown_manual_text with the pasted pricing text. The model provider being unavailable is an external_dependency_failed error. Auth: OAuth bearer with scope kinetic.teardown.write. idempotency_key is required. REST equivalent: POST https://api.kineticpricing.com/v1/teardowns. |
| kinetic.teardown_get | Get a pricing teardown and its full report. Returns the teardown by id with its full report (the agent surface is authenticated and reports are always unlocked for their owner). Owner-only: a teardown belonging to another account reads as not found. A teardown stuck in pending/processing past the stale threshold is flipped to error automatically before it is returned. Auth: OAuth bearer with scope kinetic.teardown.write. REST equivalent: GET https://api.kineticpricing.com/v1/teardowns/{id}. |
| kinetic.teardown_manual_text | Score a teardown from pasted pricing page text. Rescue path for a teardown that could not be read automatically (status 'error' with details.state='needs_manual_text'). Paste at least 200 characters of the pricing page's text; it replaces the failed fetch and is scored with the same analysis as an automatic run. Owner-only. If the teardown is not in an error state, its current state is returned unchanged. Auth: OAuth bearer with scope kinetic.teardown.write. idempotency_key is optional but recommended for safe retries. REST equivalent: POST https://api.kineticpricing.com/v1/teardowns/{id}/manual-text. |
| kinetic.teardown_unlock | Ensure a teardown's full report is unlocked. Account-owned teardowns are already unlocked for their owner on this surface, so this is an idempotent no-op: it confirms ownership and returns the full report. No email is sent (the website's email-unlock gate applies only to legacy, account-less teardowns). A teardown owned by another account reads as not found. Auth: OAuth bearer with scope kinetic.teardown.write. idempotency_key is optional but recommended for safe retries. REST equivalent: POST https://api.kineticpricing.com/v1/teardowns/{id}/unlock. |
| kinetic.research_list | List the published research reports. The public research library: every published report with its id, title, description, file size, and whether it is email-gated. Public — no authentication required. Use the id to fetch a single item or to download it. Auth: none required. REST equivalent: GET https://api.kineticpricing.com/v1/research. |
| kinetic.research_get | Get one published research report by id. Returns a single published research report's public metadata by its id (the library has no slug; the id is the identifier). Unpublished or unknown ids read as not found. Public — no authentication required. Auth: none required. REST equivalent: GET https://api.kineticpricing.com/v1/research/{slug}. |
| kinetic.research_download | Download a published research report. Authenticated equivalent of the website download: the calling account is treated as a verified lead (the download is stamped like a signed-in website download). For small reports (< 5 MB) the PDF is returned inline as { download: { content_type: 'application/pdf', encoding: 'base64', data } }. Larger reports return { download: null, download_url: null, note } because this surface has no signed-URL primitive and inlining megabytes of base64 is unreasonable — fetch those from the website research page. Unpublished or unknown ids read as not found; a missing storage object is an external_dependency_failed error. Auth: OAuth bearer with scope kinetic.research.read. idempotency_key is optional but recommended for safe retries. REST equivalent: POST https://api.kineticpricing.com/v1/research/{slug}/download. |
| kinetic.results_get | Get the deterministic analysis results for a study. Returns the computed, snapshot-backed analysis for a study you own: price points, curves, importances, or utilities depending on the method, plus the confidence level, sample guidance, and valid-response count. Numbers come from the append-only analysis snapshot — the same figures the website results page shows. Preconditions: the study must have at least its method's developing-threshold of valid responses (15 for Van Westendorp/Gabor-Granger and legacy studies, 30 for MaxDiff, 50 for conjoint); if not, you get lifecycle_conflict with a fix hint telling you how many more responses to collect. A missing or foreign study reads as resource_not_found. Auth: OAuth bearer with scope kinetic.results.read. REST equivalent: GET https://api.kineticpricing.com/v1/studies/{id}/results. |
| kinetic.narrative_get | Get the current written narrative for a study's results. Returns the latest LLM-written markdown narrative for a study you own (narrative_md), with its version and generation time, or nulls when no narrative has been generated yet. To create or refresh one, call kinetic.narrative_generate. A missing or foreign study reads as resource_not_found. Auth: OAuth bearer with scope kinetic.results.read. REST equivalent: GET https://api.kineticpricing.com/v1/studies/{id}/narrative. |
| kinetic.narrative_generate | Generate (or regenerate) the written narrative for a study's results. Computes the deterministic result, then asks the narrative model to write a fresh markdown report grounded strictly in those numbers, and appends it as a new report version. Preconditions: the study needs enough valid responses (same thresholds as kinetic.results_get) or you get lifecycle_conflict with a fix hint. If the model is unavailable or fails, you get external_dependency_failed (retryable) — retry shortly. A missing or foreign study reads as resource_not_found. Auth: OAuth bearer with scope kinetic.studies.write. REST equivalent: POST https://api.kineticpricing.com/v1/studies/{id}/narrative. |
| kinetic.evidence_get | Get the structured decision evidence composed from a study's results. Returns the evidence bundle the website results page composes from the current analysis snapshot and its statistics: the method core, per-segment slices, data-quality summary, sample guidance, confidence level, and documented limitations. Session-method studies (Van Westendorp vw-2, Gabor-Granger, MaxDiff, conjoint) only; legacy vw-1 studies return lifecycle_conflict pointing you to kinetic.results_get. Same response thresholds and not-found rules as kinetic.results_get. Auth: OAuth bearer with scope kinetic.results.read. REST equivalent: GET https://api.kineticpricing.com/v1/studies/{id}/evidence. |
| kinetic.results_export_csv | Export a study's raw responses or computed results as CSV. Returns a CSV export inline as { kind, filename, content_type, csv }. Set "kind" to "responses" for the raw per-respondent response table, or "results" for the computed-results table (price points / curves / importances / utilities). The bytes match the website export exactly. Results exports need at least 5 valid responses or you get lifecycle_conflict with a fix hint. If the CSV exceeds ~2MB it is too large to return inline: csv is null and a note explains to download it from the website instead. Requires an Idempotency-Key. A missing or foreign study reads as resource_not_found. Auth: OAuth bearer with scope kinetic.results.export. idempotency_key is required. REST equivalent: POST https://api.kineticpricing.com/v1/studies/{id}/exports/csv. |
| kinetic.cohort_list | List this workspace's cohorts with their tagged share links. Cohorts group tagged respondent share links across studies so you can compare audiences. Returns the newest 100 cohorts (each with its links). Requires an active Kinetic Pro workspace; if you get entitlement_required, complete a Pro checkout first. Auth: OAuth bearer with scope kinetic.workspace.read. REST equivalent: GET https://api.kineticpricing.com/v1/workspace/cohorts. |
| kinetic.cohort_create | Create a cohort to group tagged share links. Creates a named cohort in the caller's workspace. Add tagged study share links to it with kinetic.cohort_link_create. Requires a writable Kinetic Pro workspace seat. Send an Idempotency-Key to make retries safe. Auth: OAuth bearer with scope kinetic.workspace.write. idempotency_key is required. REST equivalent: POST https://api.kineticpricing.com/v1/workspace/cohorts. |
| kinetic.cohort_link_create | Mint a tagged share link for a study under a cohort. Adds a study share link (with an optional label) to a cohort. The study must belong to the workspace owner. Fails with lifecycle_conflict if the cohort is archived, or resource_not_found if the cohort or study is not in this workspace. Requires a writable Pro seat; send an Idempotency-Key. Auth: OAuth bearer with scope kinetic.workspace.write. idempotency_key is required. REST equivalent: POST https://api.kineticpricing.com/v1/workspace/cohorts/{cohortId}/links. |
| kinetic.cohort_archive | Archive a cohort (links stop resolving; history kept). Archives a cohort so its links stop resolving while history is preserved. Idempotent: re-archiving an already-archived cohort simply refreshes its archived-at timestamp and succeeds. Returns resource_not_found if the cohort is not in this workspace. Requires a writable Pro seat. Auth: OAuth bearer with scope kinetic.workspace.write. idempotency_key is optional but recommended for safe retries. REST equivalent: POST https://api.kineticpricing.com/v1/workspace/cohorts/{cohortId}/archive. |
| kinetic.series_list | List study series with their waves. A study series tracks the same pricing question over time — each wave is a study using one shared method. Returns the newest 100 series, each with its ordered waves (wave number, study id, name, and status). Requires an active Kinetic Pro workspace. Auth: OAuth bearer with scope kinetic.workspace.read. REST equivalent: GET https://api.kineticpricing.com/v1/workspace/series. |
| kinetic.series_create | Create a study series (one question, one method). Creates a series pinned to a single research method. Optionally seed it with firstStudyId as wave 1 — that study must belong to the workspace owner and use the same method (else lifecycle_conflict). Requires a writable Pro seat; send an Idempotency-Key. Auth: OAuth bearer with scope kinetic.workspace.write. idempotency_key is required. REST equivalent: POST https://api.kineticpricing.com/v1/workspace/series. |
| kinetic.series_wave_add | Attach a study as the next wave in a series. Appends a study as the next wave. The study must belong to the workspace owner and use the SAME method as the series (else lifecycle_conflict). A study can appear at most once per series (duplicate attach → lifecycle_conflict). Requires a writable Pro seat; send an Idempotency-Key. Auth: OAuth bearer with scope kinetic.workspace.write. idempotency_key is required. REST equivalent: POST https://api.kineticpricing.com/v1/workspace/series/{seriesId}/waves. |
| kinetic.decision_list | List decision records visible to the caller. Decision records capture what you decided from a study or scenario. NOT gated on Kinetic Pro: any study purchaser sees their own personal decisions. When the caller has a workspace, its shared decisions are included too. Returns the newest 200. Auth: OAuth bearer with scope kinetic.workspace.read. REST equivalent: GET https://api.kineticpricing.com/v1/workspace/decisions. |
| kinetic.decision_get | Get one decision with its outcome check-ins. Returns a decision (frozen calc recommendation / modeled projection included) plus its outcome check-ins, newest first. Visible to the decision's creator, owner, or workspace members. Returns resource_not_found otherwise. The response carries an ETag; pass it as If-Match when updating. Auth: OAuth bearer with scope kinetic.workspace.read. REST equivalent: GET https://api.kineticpricing.com/v1/workspace/decisions/{decisionId}. |
| kinetic.decision_create | Record a pricing decision (works without Pro for study owners). Records a decision linked to a study OR a scenario (at least one required). Study links require you to own the study. Scenario links require an active Kinetic Pro workspace seat (else entitlement_required); when a scenarioRunId is given, the modeled projection is frozen from that immutable run. If you have a writable workspace the decision attaches to it, otherwise it is personal. Send an Idempotency-Key. Auth: OAuth bearer with scope kinetic.workspace.write. idempotency_key is required. REST equivalent: POST https://api.kineticpricing.com/v1/workspace/decisions. |
| kinetic.decision_update | Update owner-decision fields or status (frozen copies never change). Patches a decision's title, decision body, reason, status, effective date, or review date. Frozen copies (calc recommendation, modeled projection) can never change. Requires edit rights (creator/owner, or a writable workspace seat) else forbidden. Supports If-Match: pass the ETag from kinetic.decision_get to avoid clobbering concurrent edits. Auth: OAuth bearer with scope kinetic.workspace.write. Supports if_match (etag) to guard concurrent edits. REST equivalent: PATCH https://api.kineticpricing.com/v1/workspace/decisions/{decisionId}. |
| kinetic.outcome_create | Add an observational outcome check-in to a decision. Appends an append-only outcome check-in (observedAt + an aggregates-only, non-empty metrics object + optional note) to a decision. If the decision was review_due, recording an outcome moves it to reviewed. Requires edit rights (else forbidden). Send an Idempotency-Key. Auth: OAuth bearer with scope kinetic.workspace.write. idempotency_key is required. REST equivalent: POST https://api.kineticpricing.com/v1/workspace/decisions/{decisionId}/outcomes. |
| kinetic.reminder_list | List the caller's workspace reminders. Reminders are owner-chosen (never automatic) nudges for a scenario review, a series wave, or a decision review. Returns the caller's newest 100 reminders in this workspace, by due date. Requires an active Kinetic Pro workspace. Auth: OAuth bearer with scope kinetic.workspace.read. REST equivalent: GET https://api.kineticpricing.com/v1/workspace/reminders. |
| kinetic.reminder_create | Create an owner-chosen reminder (never automatic). Schedules a reminder of kind scenario_review, series_wave, or decision_review, due in the future, targeting a record that lives in this workspace (else resource_not_found). Duplicate (same kind + target + due time) → lifecycle_conflict. Requires a writable Pro seat; send an Idempotency-Key. Auth: OAuth bearer with scope kinetic.workspace.write. idempotency_key is required. REST equivalent: POST https://api.kineticpricing.com/v1/workspace/reminders. |