> ## Documentation Index
> Fetch the complete documentation index at: https://docs.quackpay.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Make your first Goldenfish decision with the production HTTP API.

This guide takes you from an empty terminal to a typed decision. It uses the public decision endpoint and inline choices, so you do not need a dashboard, SDK, or stored catalog to begin.

## Before you begin

* An HTTP client such as cURL, `fetch`, or Python `requests`.
* A question with a finite set of valid answers.

The free decision endpoint does not require an API key. The examples below intentionally send no `Authorization` header, so you can make your first request without a dashboard, account console, or credential.

## Send a decision

<Steps>
  <Step title="Choose the model and outcomes">
    Pick a model identifier, write the context as `input`, and write the question as `instruction`. Provide at least two unique `choices`.
  </Step>

  <Step title="Send JSON to the decisions endpoint">
    Use `POST https://api.aspaslabs.com/v1/decisions` with `Content-Type: application/json`.

    <CodeGroup>
      ```bash cURL theme={null}
      curl https://api.aspaslabs.com/v1/decisions \
        -H "Content-Type: application/json" \
        -d '{
          "model": "goldenfish-g1",
          "input": "forgot my password",
          "instruction": "Which category applies?",
          "choices": [
            "reset_password",
            "billing",
            "cancel_account",
            "technical_issue"
          ]
        }'
      ```

      ```javascript JavaScript theme={null}
      const response = await fetch(
        "https://api.aspaslabs.com/v1/decisions",
        {
          method: "POST",
          headers: { "Content-Type": "application/json" },
          body: JSON.stringify({
            model: "goldenfish-g1",
            input: "forgot my password",
            instruction: "Which category applies?",
            choices: [
              "reset_password",
              "billing",
              "cancel_account",
              "technical_issue"
            ]
          })
        }
      );

      const decision = await response.json();
      console.log(decision.output.choice);
      ```

      ```python Python theme={null}
      import requests

      response = requests.post(
          "https://api.aspaslabs.com/v1/decisions",
          json={
              "model": "goldenfish-g1",
              "input": "forgot my password",
              "instruction": "Which category applies?",
              "choices": [
                  "reset_password",
                  "billing",
                  "cancel_account",
                  "technical_issue",
              ],
          },
          timeout=30,
      )
      response.raise_for_status()
      print(response.json()["output"]["choice"])
      ```
    </CodeGroup>
  </Step>

  <Step title="Read the typed result">
    A successful response contains the request ID, the model, the selected `choice`, its `confidence`, a `probabilities` object, and token usage.

    ```json 200 OK theme={null}
    {
      "id": "dec_01K7Y...",
      "object": "decision",
      "model": "goldenfish-g1",
      "output": {
        "choice": "reset_password",
        "confidence": 0.9489,
        "probabilities": {
          "reset_password": 0.9489,
          "billing": 0.0001,
          "cancel_account": 0.0001,
          "technical_issue": 0.0009
        }
      },
      "usage": { "input_tokens": 13 }
    }
    ```
  </Step>
</Steps>

## Request rules

The request must include `model`, `input`, and `instruction`. It must include exactly one of:

* `choices`: an inline array containing 2–300 unique, non-empty strings.
* `catalog`: the ID of an existing catalog.

`choices` and `catalog` cannot be sent together. The model is selected in the body, not by changing the route.

The free path uses inline `choices` and does not require a bearer key. A `catalog` can be used after a protected catalog has been created with the catalog API.

<Warning>
  Do not treat `confidence` as a business rule by itself. If your product needs a fallback for uncertain results, define that threshold in your application and test it against your own data.
</Warning>

## What to do next

<CardGroup cols={2}>
  <Card title="Understand the decision contract" icon="list-tree" href="/concepts/decisions">
    Learn how choices, catalogs, confidence, and probabilities fit together.
  </Card>

  <Card title="Use protected catalog endpoints" icon="key-round" href="/authentication">
    Learn when a bearer key is needed for catalog creation and management.
  </Card>

  <Card title="Create a reusable catalog" icon="library" href="/guides/catalog-workflow">
    Move stable choices out of individual requests and reuse them by ID.
  </Card>

  <Card title="Handle errors and retries" icon="shield-alert" href="/resources/errors">
    Implement request IDs, rate-limit backoff, and actionable error handling.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.