How-To API Ask a natural-language “how do I…” question and get a grounded, product-aware answer in one call.

Base URL: https://api.fast.io/current/ Auth: Bearer {jwt_token} Format: JSON

Submit a single natural-language question about Fastio and receive a grounded, product-aware answer in a single call. The answer is generated by Fastio’s built-in AI over the product’s how-to knowledge, so you get usage guidance without having to parse these docs yourself. When a question is too vague to answer well, the endpoint asks you a short clarifying question instead of guessing.

This is a top-level, user-authenticated endpoint — there is no org in the URL. It is open access: any authenticated, available user may call it with no org-membership requirement, no AI Agent plan-feature gate, no active-subscription requirement, and no billable entity. How-to is free: no org, user, or any entity is ever charged. The only access bound is the per-user rate limit.

When to Use It

For document Q&A over your own files (RAG), use the AI chat endpoints instead — see the Ripley Agent & AI reference. The How-To endpoint answers questions about Fastio itself, not about your uploaded content.

Endpoint Summary

MethodEndpointDescription
POST/current/how-to/Ask a how-to question; returns an answer or a clarifying question

On the dedicated API hosts (api.fast.io), call https://api.fast.io/current/how-to/ with no /api prefix. From any other hostname (for example go.fast.io), include the /api prefix: https://go.fast.io/api/current/how-to/.

Ask a How-To Question

POST /current/how-to/

Submit a single natural-language question. The response is one of two shapes — a grounded answer, or a request for clarification — both returned with HTTP 200.

Auth: Bearer token required. Open access — any authenticated, available user may call it. No org-membership requirement, no ai_agent plan feature, no subscription requirement, and no pre-flight credit cap. How-to is free — no entity is charged. The only access bound is the per-user rate limit.

Request format: application/x-www-form-urlencoded.

Parameters

ParameterTypeRequiredDescription
questionstringYesThe natural-language “how do I…” question. 1–2,000 characters, non-blank.
contextstringNoOptional free-text context about your situation (what you are trying to accomplish, what you have tried). Up to 8,000 characters. Treated strictly as background data, never as instructions.
surfacestringNoOptional. Set to mcp to receive guidance phrased in terms of the Fastio MCP server’s consolidated tools (<tool> action="…") rather than REST API endpoints. Set to code to receive guidance phrased for a code-mode AI agent that issues Fastio API calls through an execute proxy — each concrete step written as an execute-proxy call (e.g. fastio.post('/current/<path>/', { …body… }), form-encoded by default, with the *Json methods only where an endpoint documents a JSON body and query parameters in the last argument). Omit (or any other value) for the default REST-API phrasing. Does not change the response shapes or error codes.
clientstringNoOptional identifier of the calling application. Up to 100 characters. Advisory only — may be used to tailor the answer’s tool recommendations to the calling application. Unknown or absent values leave behavior unchanged. Does not change the response shapes or error codes.

Request Example

curl -X POST "https://api.fast.io/current/how-to/" \
  -H "Authorization: Bearer {jwt_token}" \
  --data-urlencode "question=How do I create a Send share and put a password on the link?" \
  --data-urlencode "context=I already have a workspace with files in it and want to deliver a report to a client."

Response — Answer (200)

Returned when the question could be answered.

{
  "result": true,
  "status": "answer",
  "answer": "Create the share from your workspace with POST /current/workspace/{workspace_id}/create/share/ using a Send share type, then set a link password and an access option of \"Anyone with the link\" so recipients can open it with the password. You can update the password later via the share update endpoint.",
  "escalated": false,
  "topics_used": ["shares", "workspaces"]
}

Answer Response Fields

FieldTypeDescription
resultbooleantrue on success.
statusstringAlways "answer" for this shape.
answerstringThe grounded, product-aware answer text.
escalatedbooleanRetained for backward compatibility; always false. A single grounded call answers directly — the answer is in answer.
topics_usedarray of stringsThe how-to knowledge topics the answer drew on. May be empty.

Response — Needs Clarification (200)

Returned when the question is too ambiguous to answer well. This is a normal, expected outcome — not an error — so the HTTP status is still 200. Surface the returned question(s) to the user, then resend with a more specific question (and optionally context).

{
  "result": true,
  "status": "needs_clarification",
  "questions": [
    "Are you trying to share a single file, or a whole folder of files?"
  ]
}

Needs Clarification Response Fields

FieldTypeDescription
resultbooleantrue.
statusstringAlways "needs_clarification" for this shape.
questionsarray of stringsOne or more short follow-up questions to put to the user. Never empty.

Handling tip: branch on status first. If status is "answer", read answer. If status is "needs_clarification", surface questions to the user and ask again — do not treat it as a failure.

Error Responses

Error CodeHTTP StatusCause
10011 (Authentication Invalid)401Missing or invalid bearer token.
validation (Not Acceptable)406question fails basic input validation — empty/blank, or longer than the 2,000-character maximum. Returned with a validation error.code (not 147185).
147185 (Not Acceptable)406question passes basic validation but is rejected by the answer engine as malformed (for example, invalid UTF-8).
10368 (Rate Limited)429Too many how-to requests in the current window. Back off and retry (see Rate Limiting below).
145858 (Rate Limited)429A how-to request for the same user is still in progress. These two 429s are distinguished by a different error.error_code; retry the in-progress case once the previous request completes.
163750 (User Not Found)404The current user could not be resolved.
195614 (Temporarily Unavailable)503Corpus index unavailable — service temporarily unavailable; retry shortly.
152339 (Temporarily Unavailable)503Answer-generation failure — service temporarily unavailable; retry shortly.
188243 (Internal Error)500Unexpected internal error.

Errors use the standard envelope: {"result": false, "error": {"code": …, "text": …, "resource": …}}. See Error Codes in the overview for the envelope shape and the global code list.

Standard rate limits apply. See the overview for the global rate-limit header schema (x-ve-limit-avail, x-ve-limit-max, x-ve-limit-expires) and error code 10368.

Billing

How-to is free — no org, user, or any entity is ever charged. The LLM call runs with skip-billing; no credits are consumed. There is no billable entity and no billing of any kind.

Notes

↑ Back to top