SEEAPISEEAPI
Developer CenterDocs
Get API Key
  • Getting Started
  • Authentication
  • List Model Prices
  • Create a Generation
  • Get Task Details
Image Models
Alibaba
Black Forest Labs
ByteDance
Google
Grok
OpenAI
SeeAPI
Video Models
Alibaba
ByteDance
Google
Grok
Kling
Lightricks
MiniMax
PixVerse
Runway
SeeAPI
Text Models
www.seeapi.com

One AI API for every leading model. Create images, videos, music, and multimodal AI assets online, or build with one unified API.

Support
  • Pricing
  • [email protected]
Legal
  • Privacy Policy
  • Refund Policy
  • Terms & Conditions

Copyright 2026 © SeeAPI. All rights reserved.

GROWCRAFT PTE. LTD.

·5 RAFFLES PLACE, #06-00, RAFFLES PLACE MRT STATION, SINGAPORE 048618

TypeSafe/preview

TypeSafe Jev 1.13 · Decisions

Evaluate text or structured JSON with TypeSafe Jev 1.13. Ask yes/no, choice, and score questions in one request, then retrieve answers and actual credit and token usage through the inference task API.

Developer API pricing

Provider: SeeAPI

USD estimate: $0.0037 / credit · Estimated equivalent, not an additional charge.

Decisions

Input tokens
16.8 credits / 1M tokens≈ $0.063 / 1M tokens
Output tokens
0 credits / 1M tokens≈ $0.00 / 1M tokens

Credits are charged based on actual usage. View the final credit usage in your results.

Create a decision task

POST this JSON body to /v1/inferences using your API base URL. Send Authorization: Bearer YOUR_API_KEY, Content-Type: application/json, and a unique Idempotency-Key header. This example asks all three question types about one shared state. The state and questions fields belong inside the input object, not at the request top level. Do not add an extra wrapper.

{
  "model": "jev-1-13",
  "endpoint": "decisions",
  "provider": "seeapi",
  "input": {
    "state": "The customer asks to change a delivery address.",
    "questions": {
      "routing": {
        "type": "choice",
        "instructions": "Which queue should handle this request?",
        "criteria": {
          "billing": "Questions about charges, invoices, or refunds.",
          "delivery": "Questions about delivery, tracking, or address changes."
        }
      },
      "urgency": {
        "type": "score",
        "instructions": "How urgent is the request?",
        "criteria": [
          "Can wait",
          "Needs attention soon",
          "Requires immediate attention"
        ]
      },
      "needs_support": {
        "type": "noul",
        "instructions": "Does the customer need help with an existing order?"
      }
    }
  }
}

For structured input, set input.state to a JSON object or array directly. Keep the same question definitions, adjusting instructions and criteria to your data. For example, input.state can be {"message":"Please change my delivery address.","order_status":"not_shipped"}. Send only one state value per request.

Query a task

Use the complete task ID returned by the creation request and the same API environment and API key. Query GET /v1/inferences/{task_id}, not the generation task endpoint.

For queued or processing, poll again with backoff. Stop polling at a terminal status. A succeeded task means evaluation completed, not that every answer is yes. Inspect the error code and message if the task fails.

export SEEAPI_API_BASE_URL='https://api.seeapi.com'
export SEEAPI_API_KEY='YOUR_API_KEY'
export SEEAPI_TASK_ID='task_xxx'
curl --request GET "$SEEAPI_API_BASE_URL/v1/inferences/$SEEAPI_TASK_ID" --header "Authorization: Bearer $SEEAPI_API_KEY"

Query response — 200 OK

This is an illustrative completed response for the three questions in the request example. The task ID, answers, token counts and credits are examples, not guaranteed results or a fixed per-request price.

{
  "id": "task_xxx",
  "object": "inference",
  "model": "jev-1-13",
  "endpoint": "decisions",
  "provider": "seeapi",
  "status": "succeeded",
  "consumed_credits": 0.022,
  "input_tokens": 1300,
  "output_tokens": 129,
  "result": {
    "type": "json",
    "data": {
      "answers": {
        "routing": {
          "type": "choice",
          "choice": "delivery",
          "confidence": 1,
          "probabilities": {
            "billing": 0,
            "delivery": 1
          }
        },
        "urgency": {
          "type": "score",
          "score": 0,
          "confidence": 1,
          "probabilities": {
            "0": 1,
            "1": 0,
            "2": 0
          },
          "legend": {
            "0": "Can wait",
            "1": "Needs attention soon",
            "2": "Requires immediate attention"
          }
        },
        "needs_support": {
          "type": "noul",
          "noul": 0.99
        }
      }
    }
  },
  "error": null
}

Read the answers

Match answers to submitted question IDs. Do not rely on JSON object order.

noul is the probability of yes: 0.99 means 99%, not a boolean. Apply your own application policy if you need a yes/no cutoff.

choice returns the selected option name, confidence and probabilities for the options.

score uses the zero-based scale defined by criteria and may be fractional. Match probability keys to legend entries. Position 0 does not mean 0% probability.

Only fields relevant to each answer type are returned. Decisions do not automatically apply a moderation threshold or return a flagged verdict. Assessments can be wrong; review important decisions.

Credits and token usage

consumed_credits is the actual SeeAPI credit consumption after settlement, including any amount added to the outstanding balance. input_tokens and output_tokens report usage when available. All three fields are at the response top level, not inside the result data. Use the returned values; do not infer tokens from character count or treat the example credit amount as a fixed price.

Related Resources

Market Overview

Explore all available models

Credits & Billing

View credit balance, plans, and billing activity

Usage

Review API usage and credit consumption

Request

POST/v1/inferences
AuthorizationSend your API key in the Authorization header using the Bearer scheme.Authorization: Bearer ****************

Header Params

stringrequired

Use a unique key for each new inference request.

max length: 255
Example:
order-20260818-001

Body Params

application/json
stringrequired

Use jev-1-13 for TypeSafe Jev 1.13.

Allowed:jev-1-13
Default:
jev-1-13
Example:
jev-1-13
stringrequired

Use decisions to evaluate one shared state against your questions.

Allowed:decisions
Default:
decisions
Example:
decisions
stringrequired

Use seeapi, the public Provider ID for this endpoint.

Allowed:seeapi
Default:
seeapi
Example:
seeapi
objectrequired

The input object contains state and questions. Place both fields inside input, not at the request top level.

Provider parameters

SeeAPIseeapiDefault Provider
string | object | arrayrequired

The content to evaluate: a non-empty string, JSON object, or JSON array. Send structured JSON directly, not as a string containing JSON.

  • The total length of state and questions combined must not exceed 30,000 characters. This includes the content to analyze, all question instructions, and all criteria—not 30,000 characters per field.
Example:
The customer asks to change a delivery address.
objectrequired

Provide 1–32 questions keyed by unique IDs. All questions evaluate the same state in a single task.

Example:
{"needs_support":{"type":"noul","instructions":"Does the customer need help with an existing order?"},"routing":{"type":"choice","instructions":"Which queue should handle this request?","criteria":{"billing":"Questions about charges, invoices, or refunds.","delivery":"Questions about delivery, tracking, or address changes."}},"urgency":{"type":"score","instructions":"How urgent is the request?","criteria":["Can wait","Needs attention soon","Requires immediate attention"]}}
objectrequired

A question definition identified by your chosen ID. Use only letters A–Z/a–z, digits, underscores and hyphens; maximum 128 characters. Match answers by ID rather than relying on JSON object order.

stringrequired

The question type, which determines how the model evaluates the question, the required criteria format, and the structure of the answer.

  • noul: estimate the probability that the answer is yes.
  • choice: select one named option.
  • score: evaluate against an ordered, zero-based scale.
Allowed:noulchoicescore
string | object | arrayrequired

Describe what this question should decide. Use a non-empty string, object, or array. Be specific about context, exclusions, and the outcome you need.

object | arrayoptional

Criteria guide how the model evaluates the question. The required format depends on the question type. Optional for noul; required for choice and score.

  • noul: Provide an object with both "true" and "false" descriptions, or omit criteria entirely. Neither description may be empty.
  • choice: Provide an object with 2–255 options. Each option name must be unique, non-empty, and no longer than 128 characters. Each value describes the option; use null if no description is needed.
  • score: Provide an ordered array of 2–10 non-empty criteria, from lowest to highest. Array positions define scores starting at 0.
  • Descriptions may be non-empty strings, JSON objects, or JSON arrays.
string <uri>optional

An absolute HTTPS URL that receives the terminal generation Webhook.

max length: 2048
Example:
https://client.example.com/webhooks/seeapi

Responses

202Inference accepted. Use the returned task ID to query the result.
Bodyapplication/json
  • The HTTP 202 creation example represents an accepted task, not completed answers. Query GET /v1/inferences/{task_id} for the completed result.
  • A successful task means evaluation completed; it does not mean every answer is yes or that the content passed a safety check.
stringrequired
Example:
task_xxx
stringrequired
Allowed:inference
Example:
inference
stringrequired
Allowed:jev-1-13
Example:
jev-1-13
stringrequired
Allowed:decisions
Example:
decisions
stringrequired
Allowed:seeapi
Example:
seeapi
stringrequired
Allowed:queuedprocessing
Example:
processing
numberoptional

Actual SeeAPI credits consumed after settlement. This varies by request; example values are not a fixed per-request price.

Example:
0.022
integeroptional

Input token usage when available. Tokens are not the same as characters.

Example:
1300
integeroptional

Output token usage when available. Read usage fields at the response top level, not inside result.data.

Example:
129
object | nullrequired

Structured Decisions result; null until the inference succeeds.

stringrequired
Allowed:json
objectrequired
objectrequired

Answers keyed by the question IDs submitted in this request. The response never applies a platform flagged state or threshold.

objectrequired
stringrequired
Allowed:noulchoicescore
numberoptional

Probability of yes, from 0 to 1, for noul questions. For example, 0.99 means 99% probability of yes; it is not a boolean verdict.

stringoptional

Selected option label, present only for choice answers.

numberoptional

Zero-based score for a score question, from 0 to N−1. It may be fractional; preserve the returned value.

numberoptional

Confidence from 0 to 1 for choice and score answers. Display 0.8 as 80% if using percentages.

objectoptional

Probabilities from 0 to 1, keyed by choice labels or zero-based score positions. Associate score positions with legend so users can see each criterion beside its probability.

numberrequired
objectoptional

For score answers, maps each zero-based position to its criterion description. Do not confuse a scale position with its probability.

stringrequired
object | nullrequired

Inference failure details; null unless the inference reaches an unsuccessful terminal status.

stringrequired
stringrequired
400

Inference request could not be completed.

401

Inference request could not be completed.

402

Inference request could not be completed.

403

Inference request could not be completed.

404

Inference request could not be completed.

409

Inference request could not be completed.

422

Inference request could not be completed.

429

Inference request could not be completed.

503

Inference request could not be completed.

Code Examples
Request
const response = await fetch("https://api.seeapi.com/v1/inferences", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Idempotency-Key": "order-20260818-001",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "model": "jev-1-13",
  "endpoint": "decisions",
  "provider": "seeapi",
  "input": {
    "state": "The customer asks to change a delivery address.",
    "questions": {
      "needs_support": {
        "type": "noul",
        "instructions": "Does the customer need help with an existing order?"
      },
      "routing": {
        "type": "choice",
        "instructions": "Which queue should handle this request?",
        "criteria": {
          "billing": "Questions about charges, invoices, or refunds.",
          "delivery": "Questions about delivery, tracking, or address changes."
        }
      },
      "urgency": {
        "type": "score",
        "instructions": "How urgent is the request?",
        "criteria": [
          "Can wait",
          "Needs attention soon",
          "Requires immediate attention"
        ]
      }
    }
  },
  "callback_url": "https://client.example.com/webhooks/seeapi"
})
});

const result = await response.json();
ResponseHTTP 202
{
  "id": "task_xxx",
  "object": "inference",
  "model": "jev-1-13",
  "endpoint": "decisions",
  "provider": "seeapi",
  "status": "processing",
  "result": null,
  "error": null
}
PreviousText NSFW Filter · Text ModerationNextWan 3.0 Prime · Text to Video
Request
const response = await fetch("https://api.seeapi.com/v1/inferences", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Idempotency-Key": "order-20260818-001",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "model": "jev-1-13",
  "endpoint": "decisions",
  "provider": "seeapi",
  "input": {
    "state": "The customer asks to change a delivery address.",
    "questions": {
      "needs_support": {
        "type": "noul",
        "instructions": "Does the customer need help with an existing order?"
      },
      "routing": {
        "type": "choice",
        "instructions": "Which queue should handle this request?",
        "criteria": {
          "billing": "Questions about charges, invoices, or refunds.",
          "delivery": "Questions about delivery, tracking, or address changes."
        }
      },
      "urgency": {
        "type": "score",
        "instructions": "How urgent is the request?",
        "criteria": [
          "Can wait",
          "Needs attention soon",
          "Requires immediate attention"
        ]
      }
    }
  },
  "callback_url": "https://client.example.com/webhooks/seeapi"
})
});

const result = await response.json();
ResponseHTTP 202
{
  "id": "task_xxx",
  "object": "inference",
  "model": "jev-1-13",
  "endpoint": "decisions",
  "provider": "seeapi",
  "status": "processing",
  "result": null,
  "error": null
}