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
Vidu
Music Models
Text Models

Policies

  • Data Handling & Privacy
  • Terms of Service
  • Privacy Policy
  • Commercial Use Policy
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.

Developers
  • AI Models
  • API Pricing
  • AI Integrations
  • API Keys
  • Documentation
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

preview

TypeSafe Jev 1.14 · Decisions

Evaluate text, structured JSON, and PNG/JPEG images with TypeSafe Jev 1.14. Ask yes/no, choice, score, and bounding-box questions in one synchronous request, then read structured answers with actual credit and token usage.

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.

Related Resources

Model Market

Explore available models

Credits & Billing

View your credits 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 new key for each new inference request. Retry an unchanged request with the same key to retrieve the existing task without creating another one.

  • Reusing a key with a different request body returns HTTP 409.
max length: 255
Example:
jev-parcel-image-001

Body Params

application/json
stringrequired

Use jev-1-14.

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

Use decisions.

Allowed:decisions
Default:
decisions
Example:
decisions
stringrequired

Use the public Provider ID seeapi.

Allowed:seeapi
Default:
seeapi
Example:
seeapi
objectrequired

The content to evaluate and the questions to answer. A successful synchronous request returns the answers directly in result.data.answers.

  • Do not send callback_url, including null; this endpoint does not accept callbacks.
  • Place model and endpoint before input, especially for large base64 requests.
  • The complete JSON request, including base64 text, must be at most 32 MiB. Keep the combined state and questions within 16 nesting levels and a 30,000-character serialized JSON budget. Image data URL content is excluded from that text budget by replacing it with a short placeholder, but still counts toward the request-byte limit.

Provider parameters

SeeAPIseeapiDefault Provider
string | object | arrayrequired

The text, JSON object, or JSON array to analyze. Send objects and arrays directly, not as JSON-encoded strings. To analyze images, include image_url parts anywhere inside state.

  • The Request example includes an optional parcel image. <BASE64_IMAGE_BYTES> abbreviates the image data for readability; replace it with the complete base64 content before sending. For a text-only request, omit the image part and any box question.
  • Image part format: { "type": "image_url", "image_url": { "url": "data:image/png;base64,...", "detail": "auto" } }. Replace the ellipsis with the complete base64-encoded file. Use data:image/jpeg;base64,... for JPEG.
  • At most 4 image parts per request. Only static PNG and JPEG are supported. HTTPS image URLs, bare base64, GIF, and WebP are rejected.
  • Each decoded image must be at most 16 MiB. Each side must be 280–1568 pixels, with 78,400–2,458,624 pixels in total. Resize images before submitting; the API does not automatically resize or crop them.
  • Combined processed image bytes must be at most 32 MiB. The separate 32 MiB request-body limit includes base64 expansion, so four 16 MiB images will not fit.
  • image_url.detail is optional and accepts auto, low, or high. Images are accepted only in state, never in question instructions or criteria.
Example:
{"message":"Is the parcel visibly damaged?","evidence":[{"type":"image_url","image_url":{"url":"data:image/png;base64,<BASE64_IMAGE_BYTES>"}}]}
objectrequired

An object of 1–32 questions, keyed by caller-defined IDs. Each question evaluates the same state, and its answer is returned under the same ID.

  • Question IDs are 1–128 characters and may contain letters, digits, underscores, and hyphens.
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"]},"damaged_region":{"type":"box","instructions":"Locate the most visibly damaged region in the supplied image."}}
objectrequired

One decision definition. IDs contain letters, digits, underscores, or hyphens.

stringrequired

Select the decision to perform.

  • noul: yes/no probability.
  • choice: select one category from the criteria object.
  • score: rate against an ordered criteria array, numbered from 0. Scores may be fractional.
  • box: return one image rectangle. Requires an image in state; omit criteria.
Allowed:noulchoicescorebox
string | object | arrayrequired

Describe what this question should evaluate. Non-empty text, an object, or an array is accepted; image parts are not.

  • For box questions, describe both the object and its source image, for example: “Locate the red square in state.photos[0]. Enclose the whole square and exclude the background.”
  • For multiple images, keep the question-to-image mapping in your application. No extra image-linking fields or internal image_path markers are required; the answer does not include an image ID.
object | arrayoptional

Define the labels or ordered scale used to make the decision.

  • noul: optional; when supplied, include both true and false descriptions.
  • choice: an object with 2–255 options. Each option value may be descriptive text, a non-empty object or array, or null.
  • score: an ordered array of 2–10 non-empty entries; the first is position 0.
  • box: do not include criteria.

Responses

200Synchronous inference result, or an existing task returned for an idempotent retry.
Bodyapplication/json
  • Read status first, then result.data.answers. A succeeded status means processing completed; it does not mean a yes/no answer was “yes”.
  • If an idempotent retry returns a task still processing, query it with backoff as described below.
stringrequired

Saved inference ID. Use it with GET /v1/inferences/{id}.

Example:
task_xxx
stringrequired
Allowed:inference
Example:
inference
stringrequired
Allowed:jev-1-14
Example:
jev-1-14
stringrequired
Allowed:decisions
Example:
decisions
stringrequired
Allowed:seeapi
Example:
seeapi
stringrequired

Task execution status. A succeeded task can still contain a low yes/no probability.

Allowed:queuedprocessingsucceededfailedcanceledrefundedexpired
Example:
succeeded
numberoptional

Actual SeeAPI credits charged for this task, not an estimate or a fixed price.

  • A failed task is not automatically free if model processing already incurred a charge. Inspect this value instead of assuming zero. A failure before model execution does not incur a model charge.
Example:
0.022
integeroptional

Input token usage when available. Sample values are illustrative and vary per request.

Example:
1300
integeroptional

Output token usage when available. Sample values are illustrative and vary per request.

Example:
129
object | nullrequired

Structured decision result, available when processing succeeds.

stringrequired
Allowed:json
objectrequired
objectrequired

Question IDs mapped to their decision results. Match each answer to the question with the same ID.

  • The right-side Response panel illustrates the response schema; its question IDs and values are not a recorded result of the Request example.
objectrequired
stringrequired
Allowed:noulchoicescorebox
numberoptional

Probability of “yes”, from 0 to 1. Present for noul questions.

  • This is not a Boolean. Choose any yes/no threshold in your application.
stringoptional

The selected key from your choice criteria object.

numberoptional

A zero-based rating on your ordered criteria scale. The score may be fractional.

numberoptional

Confidence from 0 to 1, returned for choice, score, and box answers.

objectoptional

One normalized rectangle in the source image. Coordinates are between 0 and 1, with left < right and top < bottom.

  • Multiply left/right by image width and top/bottom by image height. Position overlays relative to the displayed image, excluding surrounding padding.
  • No image ID or detection list is returned. Use your original question-to-image mapping.
  • There is no dedicated not_found result. Pair the box with a noul presence question when the target may be absent. Coordinates are predictions and may not exactly follow object edges.
numberrequired

Top edge as a fraction of image height.

numberrequired

Bottom edge as a fraction of image height.

numberrequired

Left edge as a fraction of image width.

numberrequired

Right edge as a fraction of image width.

objectoptional

Probabilities keyed by choice labels or zero-based score positions.

numberrequired
objectoptional

Maps each zero-based score position to the corresponding criterion.

stringrequired
object | nullrequired

Error information for a failed task. Inspect the error code and actual consumed credits.

stringrequired
stringrequired
400

Invalid request or image input.

  • Check state, question definitions, image format, and dimensions. IMAGE_INPUT_REJECTED identifies an invalid image input.
  • Remove callback_url rather than sending it as null.
  • An oversized request is rejected with HTTP 413. Reduce the total JSON body, including base64 expansion, to fit the 32 MiB limit.
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

The Idempotency-Key was already used with a different request body.

  • Use the original body for a retry, or a new key for a new request.
422

Inference request could not be completed.

429

Inference request could not be completed.

503

The request could not be completed because a required service was unavailable.

  • IMAGE_STORAGE_FAILED means the input images could not be prepared before processing. Retry later; this failure before model execution does not incur a model charge.

Query a saved task

Use the returned id to retrieve the saved result from GET /v1/inferences/{id}, using an API key authorized for that task in the same API environment. Retrieval does not run the model again. If an idempotent retry returns a task still processing, query it with backoff until it reaches a terminal status.

curl 'https://api.seeapi.com/v1/inferences/YOUR_INFERENCE_ID' \
  -H 'Authorization: Bearer YOUR_API_KEY'

A succeeded status means the request completed; it does not mean a yes/no answer was “yes”. Inspect result.data.answers for the actual decisions. This endpoint returns structured JSON rather than generated assets, and the task response does not return the original input images.

Code Examples
Request
const response = await fetch("https://api.seeapi.com/v1/inferences", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Idempotency-Key": "jev-parcel-image-001",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "model": "jev-1-14",
  "endpoint": "decisions",
  "provider": "seeapi",
  "input": {
    "state": {
      "message": "Is the parcel visibly damaged?",
      "evidence": [
        {
          "type": "image_url",
          "image_url": {
            "url": "data:image/png;base64,<BASE64_IMAGE_BYTES>"
          }
        }
      ]
    },
    "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"
        ]
      },
      "damaged_region": {
        "type": "box",
        "instructions": "Locate the most visibly damaged region in the supplied image."
      }
    }
  }
})
});

const result = await response.json();
ResponseHTTP 200
{
  "id": "task_xxx",
  "object": "inference",
  "model": "jev-1-14",
  "endpoint": "decisions",
  "provider": "seeapi",
  "status": "succeeded",
  "consumed_credits": 0.022,
  "input_tokens": 1300,
  "output_tokens": 129,
  "result": {
    "type": "json",
    "data": {
      "answers": {
        "needs_support": {
          "type": "noul",
          "noul": 0.91
        },
        "routing": {
          "type": "choice",
          "choice": "delivery",
          "confidence": 0.88,
          "probabilities": {
            "billing": 0.08,
            "delivery": 0.92
          }
        },
        "urgency": {
          "type": "score",
          "score": 1,
          "confidence": 0.76,
          "probabilities": {
            "0": 0.08,
            "1": 0.76,
            "2": 0.16
          },
          "legend": {
            "0": "Can wait",
            "1": "Needs attention soon",
            "2": "Requires immediate attention"
          }
        },
        "damaged_region": {
          "type": "box",
          "box": {
            "top": 0.12,
            "bottom": 0.58,
            "left": 0.2,
            "right": 0.74
          },
          "confidence": 0.86
        }
      }
    }
  },
  "error": null
}
PreviousTypeSafe Jev 1.13 · DecisionsNextWan 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": "jev-parcel-image-001",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "model": "jev-1-14",
  "endpoint": "decisions",
  "provider": "seeapi",
  "input": {
    "state": {
      "message": "Is the parcel visibly damaged?",
      "evidence": [
        {
          "type": "image_url",
          "image_url": {
            "url": "data:image/png;base64,<BASE64_IMAGE_BYTES>"
          }
        }
      ]
    },
    "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"
        ]
      },
      "damaged_region": {
        "type": "box",
        "instructions": "Locate the most visibly damaged region in the supplied image."
      }
    }
  }
})
});

const result = await response.json();
ResponseHTTP 200
{
  "id": "task_xxx",
  "object": "inference",
  "model": "jev-1-14",
  "endpoint": "decisions",
  "provider": "seeapi",
  "status": "succeeded",
  "consumed_credits": 0.022,
  "input_tokens": 1300,
  "output_tokens": 129,
  "result": {
    "type": "json",
    "data": {
      "answers": {
        "needs_support": {
          "type": "noul",
          "noul": 0.91
        },
        "routing": {
          "type": "choice",
          "choice": "delivery",
          "confidence": 0.88,
          "probabilities": {
            "billing": 0.08,
            "delivery": 0.92
          }
        },
        "urgency": {
          "type": "score",
          "score": 1,
          "confidence": 0.76,
          "probabilities": {
            "0": 0.08,
            "1": 0.76,
            "2": 0.16
          },
          "legend": {
            "0": "Can wait",
            "1": "Needs attention soon",
            "2": "Requires immediate attention"
          }
        },
        "damaged_region": {
          "type": "box",
          "box": {
            "top": 0.12,
            "bottom": 0.58,
            "left": 0.2,
            "right": 0.74
          },
          "confidence": 0.86
        }
      }
    }
  },
  "error": null
}