Make a decision

A decision in Default mode (when mode is left out) or Direct mode.

POST /api/v1/decisions. The fields, answers and errors below are rendered from the OpenAPI document.

Make a decision

POST /api/v1/decisions

One model run per stakeholder, on eevo-1 (the one model; model may be left out). mode says how: default (also when mode is left out), recommended for supporting agentic and human judgement: each option lists its consequences under consequences, and Eevo sizes them against each other and gives each option’s expected value per stakeholder. direct, for high-volume decisions and custom tasks: Eevo answers which option is best for each stakeholder in a single model call, without consequences.

Request body

application/json

Variants:

  • ExplicitDecisionRequest

    object

    • model (optional)

      string

      The one Eevo model, eevo-1 (the default when left out).

      Allowed values
      ["eevo-1"]
      Default
      "eevo-1"
    • mode (optional)

      string

      default (also when left out): Default mode, recommended for supporting agentic and human judgement. Each option lists its consequences; Eevo sizes them and gives each option’s expected value per stakeholder. For an answer without consequences, send direct.

      Allowed values
      ["default"]
      Default
      "default"
    • context (required)

      string

      Minimum length
      1
      Maximum length
      20000
    • stakeholders (required)

      array

      Minimum items
      1
      Maximum items
      8

      Array items:

      object

      • id (optional)

        string

        Minimum length
        1
        Maximum length
        40
        Pattern
        "^[A-Za-z0-9_-]+$"
      • description (required)

        string

        Minimum length
        1
        Maximum length
        2000
      • values (optional)

        string

        Maximum length
        2000

      Additional properties: not allowed.

    • options (required)

      array

      Minimum items
      2
      Maximum items
      8

      Array items:

      object

      • id (required)

        string

        Allowed values
        ["A","B","C","D","E","F","G","H"]
      • description (required)

        string

        Minimum length
        1
        Maximum length
        2000
      • consequences (required)

        array

        Minimum items
        1
        Maximum items
        40

        Array items:

        object

        • id (optional)

          string

          Minimum length
          1
          Maximum length
          40
          Pattern
          "^[A-Za-z0-9_-]+$"
        • description (required)

          string

          Minimum length
          1
          Maximum length
          1000
        • label (optional)

          string

          Minimum length
          1
          Maximum length
          60
        • stakeholders (optional)

          array

          Minimum items
          1

          Array items:

          string

          Minimum length
          1
          Maximum length
          40
          Pattern
          "^[A-Za-z0-9_-]+$"
        • valence (required)

          Variants:

          • string

            Allowed values
            ["benefit","harm"]
          • object

            Additional property values:

            string

            Allowed values
            ["benefit","harm"]

        Additional properties: not allowed.

      Additional properties: not allowed.

    • seed (optional)

      integer

      Minimum
      0
      Maximum
      4294967295
    • async (optional)

      boolean

    • metadata (optional)

      object

      • conversation (optional)

        object

        • platform (required)

          string

          Allowed values
          ["slack","teams","google_chat","other"]
        • channel (optional)

          string

          Minimum length
          1
          Maximum length
          200
        • thread_url (optional)

          string

          Minimum length
          1
          Maximum length
          2000

        Additional properties: not allowed.

      • issue (optional)

        object

        • tracker (required)

          string

          Allowed values
          ["linear","jira","github","other"]
        • url (required)

          string

          Minimum length
          1
          Maximum length
          2000
        • key (optional)

          string

          Minimum length
          1
          Maximum length
          100
        • title (optional)

          string

          Minimum length
          1
          Maximum length
          300

        Additional properties: not allowed.

      • pull_request (optional)

        object

        • platform (required)

          string

          Allowed values
          ["github","gitlab","bitbucket","azure_devops","other"]
        • url (required)

          string

          Minimum length
          1
          Maximum length
          2000
        • repo (optional)

          string

          Minimum length
          1
          Maximum length
          200
        • number (optional)

          integer

          Minimum
          0
          Exclusive minimum
          true
        • title (optional)

          string

          Minimum length
          1
          Maximum length
          300

        Additional properties: not allowed.

      • on_behalf_of (optional)

        object

        • name (optional)

          string

          Minimum length
          1
          Maximum length
          200
        • email (optional)

          string · email

          Maximum length
          320

        Additional properties: not allowed.

      • links (optional)

        array

        Maximum items
        10

        Array items:

        object

        • url (required)

          string

          Minimum length
          1
          Maximum length
          2000
        • label (optional)

          string

          Minimum length
          1
          Maximum length
          200

        Additional properties: not allowed.

      Additional properties: not allowed.

    • revises (optional)

      string

      Minimum length
      1
      Maximum length
      64
    • revision_note (optional)

      object

      • reason (optional)

        string

        Minimum length
        1
        Maximum length
        2000
      • missed (required)

        array

        Minimum items
        1
        Maximum items
        20

        Array items:

        object

        • kind (required)

          string

          Allowed values
          ["context","consequence","stakeholder","option","size_or_probability","other"]
        • description (required)

          string

          Minimum length
          1
          Maximum length
          1000

        Additional properties: not allowed.

      Additional properties: not allowed.

    • share_with_org (optional)

      boolean

    Additional properties: not allowed.

    Example:

    {
      "model": "eevo-1",
      "mode": "default",
      "context": "Acme Corp found a data-export bug that shows some customers a wrong invoice total. A fix is ready; a log dump that would confirm it arrives in 40 minutes.",
      "options": [
        {
          "id": "A",
          "description": "Ship the fix now.",
          "consequences": [
            {
              "id": "a1",
              "label": "Wrong totals stop now",
              "description": "About 200 customers stop seeing a wrong invoice total 40 minutes sooner.",
              "valence": "benefit"
            },
            {
              "id": "a2",
              "label": "Invoices to recheck",
              "description": "Without the log dump to confirm the fix, about 20 customers get an email asking them to recheck one invoice.",
              "valence": "harm"
            }
          ]
        },
        {
          "id": "B",
          "description": "Wait for the log dump, then ship.",
          "consequences": [
            {
              "id": "b1",
              "label": "40 more minutes of wrong totals",
              "description": "About 200 customers keep seeing a wrong invoice total for 40 more minutes.",
              "valence": "harm"
            }
          ]
        }
      ],
      "stakeholders": [
        {
          "id": "customers",
          "description": "The affected customers",
          "values": "Correct invoices, no surprises."
        }
      ]
    }
  • DirectDecisionRequest

    object

    • model (optional)

      string

      The one Eevo model, eevo-1 (the default when left out).

      Allowed values
      ["eevo-1"]
      Default
      "eevo-1"
    • mode (required)

      string

      direct: Direct mode, for high-volume decisions and custom tasks. Eevo answers which option is best for each stakeholder in a single model call; options carry no consequences.

      Allowed values
      ["direct"]
    • context (required)

      string

      Minimum length
      1
      Maximum length
      20000
    • options (required)

      array

      Minimum items
      2
      Maximum items
      8

      Array items:

      object

      • id (required)

        string

        Allowed values
        ["A","B","C","D","E","F","G","H"]
      • description (required)

        string

        Minimum length
        1
        Maximum length
        2000

      Additional properties: not allowed.

    • stakeholders (required)

      array

      Minimum items
      1
      Maximum items
      8

      Array items:

      object

      • id (optional)

        string

        Minimum length
        1
        Maximum length
        40
        Pattern
        "^[A-Za-z0-9_-]+$"
      • description (required)

        string

        Minimum length
        1
        Maximum length
        2000
      • values (optional)

        string

        Maximum length
        2000

      Additional properties: not allowed.

    • metadata (optional)

      object

      • conversation (optional)

        object

        • platform (required)

          string

          Allowed values
          ["slack","teams","google_chat","other"]
        • channel (optional)

          string

          Minimum length
          1
          Maximum length
          200
        • thread_url (optional)

          string

          Minimum length
          1
          Maximum length
          2000

        Additional properties: not allowed.

      • issue (optional)

        object

        • tracker (required)

          string

          Allowed values
          ["linear","jira","github","other"]
        • url (required)

          string

          Minimum length
          1
          Maximum length
          2000
        • key (optional)

          string

          Minimum length
          1
          Maximum length
          100
        • title (optional)

          string

          Minimum length
          1
          Maximum length
          300

        Additional properties: not allowed.

      • pull_request (optional)

        object

        • platform (required)

          string

          Allowed values
          ["github","gitlab","bitbucket","azure_devops","other"]
        • url (required)

          string

          Minimum length
          1
          Maximum length
          2000
        • repo (optional)

          string

          Minimum length
          1
          Maximum length
          200
        • number (optional)

          integer

          Minimum
          0
          Exclusive minimum
          true
        • title (optional)

          string

          Minimum length
          1
          Maximum length
          300

        Additional properties: not allowed.

      • on_behalf_of (optional)

        object

        • name (optional)

          string

          Minimum length
          1
          Maximum length
          200
        • email (optional)

          string · email

          Maximum length
          320

        Additional properties: not allowed.

      • links (optional)

        array

        Maximum items
        10

        Array items:

        object

        • url (required)

          string

          Minimum length
          1
          Maximum length
          2000
        • label (optional)

          string

          Minimum length
          1
          Maximum length
          200

        Additional properties: not allowed.

      Additional properties: not allowed.

    • revises (optional)

      string

      Minimum length
      1
      Maximum length
      64
    • revision_note (optional)

      object

      • reason (optional)

        string

        Minimum length
        1
        Maximum length
        2000
      • missed (required)

        array

        Minimum items
        1
        Maximum items
        20

        Array items:

        object

        • kind (required)

          string

          Allowed values
          ["context","consequence","stakeholder","option","size_or_probability","other"]
        • description (required)

          string

          Minimum length
          1
          Maximum length
          1000

        Additional properties: not allowed.

      Additional properties: not allowed.

    • share_with_org (optional)

      boolean

    Additional properties: not allowed.

    Example:

    {
      "model": "eevo-1",
      "mode": "direct",
      "context": "Our nightly ETL failed at 02:10. A fix is ready, but the log dump that would confirm it arrives at 03:00. Downstream dashboards refresh at 06:00.",
      "options": [
        {
          "id": "A",
          "description": "Ship the fix now"
        },
        {
          "id": "B",
          "description": "Wait for the log dump"
        }
      ],
      "stakeholders": [
        {
          "id": "customers",
          "description": "The customers who read the dashboards",
          "values": "Correct numbers on time"
        },
        {
          "id": "data-team",
          "description": "The data team",
          "values": "Reliability first; no repeated incidents"
        }
      ],
      "metadata": {
        "conversation": {
          "platform": "slack",
          "channel": "#data-team",
          "thread_url": "https://northwind.slack.com/archives/C04DATA/p1759561800123456"
        },
        "issue": {
          "tracker": "linear",
          "url": "https://linear.app/northwind/issue/DATA-398",
          "key": "DATA-398",
          "title": "Nightly ETL fails on lock timeout"
        },
        "pull_request": {
          "platform": "github",
          "url": "https://github.com/northwind/etl/pull/412",
          "repo": "northwind/etl",
          "number": 412
        },
        "on_behalf_of": {
          "name": "Maija Virtanen",
          "email": "maija@northwind.example"
        }
      }
    }

Responses

Response 200

The decision, one result per stakeholder.

application/json

Variants:

  • ExplicitDecisionResponse

    object

    • id (required)

      string

      Request id, as in the Eevo console decision log.

    • model (required)

      string

    • mode (required)

      string

      Allowed values
      ["default"]
    • overlap (required)

      string

      Allowed values
      ["correct","report","off"]
    • seed (required)

      number

    • results (required)

      array

      One result per stakeholder, in request order.

      Array items:

      object

      • stakeholder (required)

        object

        • id (required)

          string

        • description (required)

          string

        Additional properties: not allowed.

      • best (required)

        string

        The option with the highest expected value for this stakeholder.

        Allowed values
        ["A","B","C","D","E","F","G","H"]
      • confidence (required)

        number

      • probabilities (required)

        object

        P(highest EV) per option.

        Additional property values:

        number

      • ev (required)

        object

        Expected value per option on this stakeholder's own scale, with p10-p90.

        Additional property values:

        object

        • mean (required)

          number

        • p10 (required)

          number

        • p90 (required)

          number

        Additional properties: not allowed.

      • consequences (required)

        array

        Array items:

        object

        • id (required)

          string

        Additional properties: allowed.

      • overlaps (required)

        array

        Array items:

        object

        • a (required)

          string

        • b (required)

          string

        • share (required)

          number

        Additional properties: allowed.

      Additional properties: allowed.

    • agreement (required)

      object

      • all_same (required)

        boolean

      • best_by_stakeholder (required)

        object

        Additional property values:

        string

        Allowed values
        ["A","B","C","D","E","F","G","H"]

      Additional properties: not allowed.

    • warnings (required)

      array

      Array items:

      string

    • usage (required)

      object

      • input_tokens (required)

        number

      • output_tokens (required)

        number

      • ratio_records (required)

        number

      • overlap_records (required)

        number

      Additional properties: allowed.

    • cost_usd (required)

      number

    • links (required)

      object | null

      • view_url (required)

        string

      • png_url (required)

        string

      Additional properties: not allowed.

    • meta (required)

      object

      Additional properties: allowed.

    • notes (required)

      string

    • lineage (optional)

      object

      Where the decision sits in its revision chain: the first decision, its number (1 = first) and the one it revises.

      • root_id (required)

        string

      • number (required)

        number

      • previous_id (required)

        string | null

      Additional properties: not allowed.

    Additional properties: not allowed.

    Example:

    {
      "id": "dec_7b1c0e4f9a2d4c6b8e3f5a1d2c4b6e8f",
      "model": "eevo-1",
      "mode": "default",
      "overlap": "correct",
      "seed": 20261006,
      "results": [
        {
          "stakeholder": {
            "id": "customers",
            "description": "The affected customers"
          },
          "best": "A",
          "confidence": 0.99,
          "probabilities": {
            "A": 0.99,
            "B": 0.01
          },
          "p_best": {
            "A": 0.99,
            "B": 0.01
          },
          "p_best_uncorrected": {
            "A": 1,
            "B": 0
          },
          "best_uncorrected": "A",
          "ev": {
            "A": {
              "mean": 0.52,
              "p10": 0.38,
              "p90": 0.63
            },
            "B": {
              "mean": -0.45,
              "p10": -0.58,
              "p90": -0.33
            }
          },
          "ev_uncorrected": {
            "A": {
              "mean": 0.87,
              "p10": 0.79,
              "p90": 0.95
            },
            "B": {
              "mean": -0.81,
              "p10": -0.9,
              "p90": -0.66
            }
          },
          "consequences": [
            {
              "id": "a1",
              "option": "A",
              "description": "About 200 customers stop seeing a wrong invoice total 40 minutes sooner.",
              "label": "Wrong totals stop now",
              "valence": "benefit",
              "size": {
                "value": 1,
                "p10": 0.82,
                "p90": 1
              },
              "counted_share": 0.6,
              "overlaps_with": [
                {
                  "with": "b1",
                  "share": 0.88
                }
              ],
              "discounted_by": {
                "with": "b1",
                "type": "mirror",
                "overlap": 0.88,
                "share": 0.4,
                "absence_p": 0.5
              }
            },
            {
              "id": "a2",
              "option": "A",
              "description": "Without the log dump to confirm the fix, about 20 customers get an email asking them to recheck one invoice.",
              "label": "Invoices to recheck",
              "valence": "harm",
              "size": {
                "value": 0.18,
                "p10": 0.09,
                "p90": 0.31
              },
              "counted_share": 1,
              "overlaps_with": [],
              "discounted_by": null
            },
            {
              "id": "b1",
              "option": "B",
              "description": "About 200 customers keep seeing a wrong invoice total for 40 more minutes.",
              "label": "40 more minutes of wrong totals",
              "valence": "harm",
              "size": {
                "value": 0.9,
                "p10": 0.74,
                "p90": 1
              },
              "counted_share": 0.56,
              "overlaps_with": [
                {
                  "with": "a1",
                  "share": 0.88
                }
              ],
              "discounted_by": {
                "with": "a1",
                "type": "mirror",
                "overlap": 0.88,
                "share": 0.44,
                "absence_p": 0.5
              }
            }
          ],
          "overlaps": [
            {
              "a": "a1",
              "b": "b1",
              "share": 0.88,
              "p": 0.97,
              "type": "mirror",
              "type_p": 0.95,
              "kind": "mirror",
              "absence_side": "a1",
              "absence_p": 0.5,
              "absence": {
                "a1": 0.5,
                "b1": 0.5
              }
            }
          ],
          "removed_share": 0.41,
          "mc": {
            "draws": 1000,
            "solved": 1000
          },
          "records": {
            "ratio": 3,
            "overlap": 2
          }
        }
      ],
      "agreement": {
        "all_same": true,
        "best_by_stakeholder": {
          "customers": "A"
        }
      },
      "warnings": [],
      "usage": {
        "input_tokens": 6370,
        "output_tokens": 0,
        "ratio_records": 3,
        "overlap_records": 2
      },
      "cost_usd": 0.01593,
      "links": {
        "view_url": "https://eevo.io/decisions/dec_7b1c0e4f9a2d4c6b8e3f5a1d2c4b6e8f/explicit",
        "png_url": "https://eevo.io/api/arvo/decisions/dec_7b1c0e4f9a2d4c6b8e3f5a1d2c4b6e8f/explicit.png"
      },
      "meta": {
        "tau": 0.2,
        "draws": 1000,
        "ratio_spread_scale": 0.72,
        "overlap_model": "eevo-1@77e90830",
        "correction": {
          "mirror": false,
          "kept": true
        }
      },
      "notes": "EVs are on each stakeholder's own scale (largest consequence = 1); compare options within a stakeholder, not across stakeholders. Informative, not a recommendation."
    }
  • DirectDecisionResponse

    object

    • id (required)

      string

      Request id, as in the Eevo console decision log.

    • model (required)

      string

      Allowed values
      ["eevo-1"]
    • results (required)

      array

      One result per stakeholder, in request order.

      Array items:

      object

      • stakeholder (required)

        object

        • id (required)

          string

        • description (required)

          string

        Additional properties: not allowed.

      • best (required)

        string

        The best option for this stakeholder.

        Allowed values
        ["A","B","C","D","E","F","G","H"]
      • confidence (required)

        number

        Probability of the best option, 0-1.

      • probabilities (required)

        object

        Probability that each option is the best one.

        Additional property values:

        number

      Additional properties: not allowed.

    • agreement (required)

      object

      Whether the stakeholders share a best option. There is deliberately no combined verdict.

      • all_same (required)

        boolean

      • best_by_stakeholder (required)

        object

        Additional property values:

        string

        Allowed values
        ["A","B","C","D","E","F","G","H"]

      Additional properties: not allowed.

    • usage (required)

      object

      • input_tokens (required)

        number

      • output_tokens (required)

        number

      Additional properties: not allowed.

    • cost_usd (required)

      number

    • lineage (optional)

      object

      Where the decision sits in its revision chain: the first decision, its number (1 = first) and the one it revises.

      • root_id (required)

        string

      • number (required)

        number

      • previous_id (required)

        string | null

      Additional properties: not allowed.

    Additional properties: not allowed.

    Example:

    {
      "id": "dec_4e9a1c7b2d8f4a3e9c6b0d1f7a2e5c84",
      "model": "eevo-1",
      "results": [
        {
          "stakeholder": {
            "id": "customers",
            "description": "The customers who read the dashboards"
          },
          "best": "A",
          "confidence": 0.74,
          "probabilities": {
            "A": 0.74,
            "B": 0.26
          }
        },
        {
          "stakeholder": {
            "id": "data-team",
            "description": "The data team"
          },
          "best": "B",
          "confidence": 0.63,
          "probabilities": {
            "A": 0.37,
            "B": 0.63
          }
        }
      ],
      "agreement": {
        "all_same": false,
        "best_by_stakeholder": {
          "customers": "A",
          "data-team": "B"
        }
      },
      "usage": {
        "input_tokens": 2381,
        "output_tokens": 0
      },
      "cost_usd": 0.00595
    }

Response 202

Default mode only: the decision is still running after about 50 seconds (a model waking from idle takes a few minutes), or async was true. It goes on running and is billed when it completes; poll poll_url (GET /v1/decisions/{id}) every retry_after seconds until status is ok (the answer is in response) or error.

application/json

object

  • id (required)

    string

  • model (required)

    string

  • mode (required)

    string

    Value
    "default"
  • status (required)

    string

    Value
    "running"
  • progress (required)

    object

    • done (optional)

      integer

    • total (optional)

      integer

  • poll_url (required)

    string

    The GET /v1/decisions/{id} URL to poll.

  • retry_after (required)

    integer

    Seconds to wait between polls.

  • lineage (optional)

    object

    Additional properties: allowed.

Response 400

The request is invalid; the message says which field and why.

application/json

Error

object

  • error (required)

    object

    • type (required)

      string

      Allowed values
      ["invalid_request","authentication","insufficient_credit","model_unavailable","model_warming","free_capacity_busy","too_many_overlap_pairs","too_many_records","revision_conflict","rate_limited","server_error"]
    • message (required)

      string

Response 401

No valid API key.

application/json

Error

object

  • error (required)

    object

    • type (required)

      string

      Allowed values
      ["invalid_request","authentication","insufficient_credit","model_unavailable","model_warming","free_capacity_busy","too_many_overlap_pairs","too_many_records","revision_conflict","rate_limited","server_error"]
    • message (required)

      string

Response 402

No free decisions or credit left for the request.

application/json

Error

object

  • error (required)

    object

    • type (required)

      string

      Allowed values
      ["invalid_request","authentication","insufficient_credit","model_unavailable","model_warming","free_capacity_busy","too_many_overlap_pairs","too_many_records","revision_conflict","rate_limited","server_error"]
    • message (required)

      string

Response 403

Only the person who made the decision, or the API key it was made with, can change who sees it or publish it.

application/json

Error

object

  • error (required)

    object

    • type (required)

      string

      Allowed values
      ["invalid_request","authentication","insufficient_credit","model_unavailable","model_warming","free_capacity_busy","too_many_overlap_pairs","too_many_records","revision_conflict","rate_limited","server_error"]
    • message (required)

      string

Response 409

The model is not served yet, or the revised decision already has a newer revision.

application/json

Error

object

  • error (required)

    object

    • type (required)

      string

      Allowed values
      ["invalid_request","authentication","insufficient_credit","model_unavailable","model_warming","free_capacity_busy","too_many_overlap_pairs","too_many_records","revision_conflict","rate_limited","server_error"]
    • message (required)

      string

Response 410

No such decision that you can see: none in your organization, or one not shared with you.

application/json

Error

object

  • error (required)

    object

    • type (required)

      string

      Allowed values
      ["invalid_request","authentication","insufficient_credit","model_unavailable","model_warming","free_capacity_busy","too_many_overlap_pairs","too_many_records","revision_conflict","rate_limited","server_error"]
    • message (required)

      string

Response 429

Rate limit reached (see Retry-After), or your organization already has 3 Default mode decisions running; send it when one is done.

application/json

Error

object

  • error (required)

    object

    • type (required)

      string

      Allowed values
      ["invalid_request","authentication","insufficient_credit","model_unavailable","model_warming","free_capacity_busy","too_many_overlap_pairs","too_many_records","revision_conflict","rate_limited","server_error"]
    • message (required)

      string

Response 502

The model failed to answer, or the decision could not be completed. Nothing is billed.

application/json

Error

object

  • error (required)

    object

    • type (required)

      string

      Allowed values
      ["invalid_request","authentication","insufficient_credit","model_unavailable","model_warming","free_capacity_busy","too_many_overlap_pairs","too_many_records","revision_conflict","rate_limited","server_error"]
    • message (required)

      string

Response 503

The model is starting after being idle, or a request on free decisions found it busy (free_capacity_busy); retry after Retry-After seconds. Nothing is billed.

application/json

Error

object

  • error (required)

    object

    • type (required)

      string

      Allowed values
      ["invalid_request","authentication","insufficient_credit","model_unavailable","model_warming","free_capacity_busy","too_many_overlap_pairs","too_many_records","revision_conflict","rate_limited","server_error"]
    • message (required)

      string

Make a decision: Default: examples

Request example

curl -X POST 'https://eevo.io/api/v1/decisions' \
  -H "Authorization: Bearer $EEVO_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "model": "eevo-1",
  "mode": "default",
  "context": "Acme Corp found a data-export bug that shows some customers a wrong invoice total. A fix is ready; a log dump that would confirm it arrives in 40 minutes.",
  "options": [
    {
      "id": "A",
      "description": "Ship the fix now.",
      "consequences": [
        {
          "id": "a1",
          "label": "Wrong totals stop now",
          "description": "About 200 customers stop seeing a wrong invoice total 40 minutes sooner.",
          "valence": "benefit"
        },
        {
          "id": "a2",
          "label": "Invoices to recheck",
          "description": "Without the log dump to confirm the fix, about 20 customers get an email asking them to recheck one invoice.",
          "valence": "harm"
        }
      ]
    },
    {
      "id": "B",
      "description": "Wait for the log dump, then ship.",
      "consequences": [
        {
          "id": "b1",
          "label": "40 more minutes of wrong totals",
          "description": "About 200 customers keep seeing a wrong invoice total for 40 more minutes.",
          "valence": "harm"
        }
      ]
    }
  ],
  "stakeholders": [
    {
      "id": "customers",
      "description": "The affected customers",
      "values": "Correct invoices, no surprises."
    }
  ]
}'

Make a decision: Direct: examples

Request example

curl -X POST 'https://eevo.io/api/v1/decisions' \
  -H "Authorization: Bearer $EEVO_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "model": "eevo-1",
  "mode": "direct",
  "context": "Our nightly ETL failed at 02:10. A fix is ready, but the log dump that would confirm it arrives at 03:00. Downstream dashboards refresh at 06:00.",
  "options": [
    {
      "id": "A",
      "description": "Ship the fix now"
    },
    {
      "id": "B",
      "description": "Wait for the log dump"
    }
  ],
  "stakeholders": [
    {
      "id": "customers",
      "description": "The customers who read the dashboards",
      "values": "Correct numbers on time"
    },
    {
      "id": "data-team",
      "description": "The data team",
      "values": "Reliability first; no repeated incidents"
    }
  ],
  "metadata": {
    "conversation": {
      "platform": "slack",
      "channel": "#data-team",
      "thread_url": "https://northwind.slack.com/archives/C04DATA/p1759561800123456"
    },
    "issue": {
      "tracker": "linear",
      "url": "https://linear.app/northwind/issue/DATA-398",
      "key": "DATA-398",
      "title": "Nightly ETL fails on lock timeout"
    },
    "pull_request": {
      "platform": "github",
      "url": "https://github.com/northwind/etl/pull/412",
      "repo": "northwind/etl",
      "number": 412
    },
    "on_behalf_of": {
      "name": "Maija Virtanen",
      "email": "maija@northwind.example"
    }
  }
}'