SAM 3 is a unified foundation model for promptable image segmentation using text, points, or boxes to detect and segment objects. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Idle
/filters:quality(85)/examples/fb2ad12c6943a7ae520ecd9c289e1a5b/1783684024664122495_BU5SFth5.webp)
$0.005per run·~200 / $1
/filters:quality(82)/examples/fb2ad12c6943a7ae520ecd9c289e1a5b/1783684024664122495_BU5SFth5.webp)
the man
/filters:quality(82)/examples/16a908f72fd498bfa836eccd6cff3a47/1783684034213860551_oRIT6htE.webp)
the person
/filters:quality(82)/examples/bb16254a5d2faebb1db1fd38d7e66579/1783684037692297236_fIxGV4en.webp)
the woman
/filters:quality(82)/examples/65d0525de7449d731edd654116c9913e/1783684040070959027_JnclvFOY.webp)
the man
/filters:quality(82)/examples/00c7fef25f5524189e422112572d2a8b/1783684042516057570_Dxvi44SF.webp)
the boat
SAM3 Image Segmentation segments target objects in an image using flexible prompt inputs. Provide an image and use a text prompt, point prompts, box prompts, or a combination of them to generate a precise segmentation result for the selected subject.
Image segmentation workflow
Segment people, objects, animals, backgrounds, or other visible targets from a source image.
Multiple prompt types
Use text prompts, point prompts, box prompts, or combined prompt guidance for more accurate targeting.
Text-based target selection
Describe what to segment with natural language, such as the man, the car, or background.
Point and box control
Use coordinates or bounding boxes when you need more precise target selection.
Mask output control
Use apply_mask to choose whether the mask is applied to the image or returned as a black-and-white mask-style output.
Low-cost segmentation
Generate segmentation outputs at a fixed price per image.
| Parameter | Required | Description |
|---|---|---|
| image | Yes | Source image to segment. Upload an image or provide a public image URL. |
| prompt | Conditional | Text description of the target object or region to segment. |
| point_prompts | Conditional | Point coordinates used to identify the target object or region. |
| box_prompts | Conditional | Bounding box coordinates used to identify the target object or region. |
| apply_mask | No | Whether to apply the mask to the original image. When disabled, the output is a mask-style image with a black background and the selected region in white. |
| output_format | No | Output image format: jpeg, png, or webp. Default: png. |
At least one prompt type must be provided: prompt, point_prompts, or box_prompts.
apply_mask to apply the mask to the image. Disable it when you need a black-and-white mask output.jpeg, png, or webp.Pricing is fixed at $0.005 per image.
| Output | Cost |
|---|---|
| One segmented image | $0.005 |
Image size, prompt type, apply_mask, and output_format do not add separate charges.
person, dog, car, or background.apply_mask=true when you want the mask applied to the original image.apply_mask=false when you need a black-background mask output with the selected region shown in white.png when working with mask or compositing workflows.image is required.prompt, point_prompts, or box_prompts must be provided.apply_mask is disabled, the output is a mask-style image with a black background and the selected region in white.output_format defaults to png.Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/wavespeed-ai/sam3-image with your input as JSON. The endpoint returns a prediction id. Start polling the result endpoint around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. On completed, read output values from data.outputs. Examples for Sam3 Image below.
set -euo pipefail
: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"
REQUEST_BODY=$(cat <<'JSON'
{
"image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
"apply_mask": true,
"output_format": "png"
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/sam3-image" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $WAVESPEED_API_KEY" \
-d "$REQUEST_BODY")
TASK=$(printf '%s' "$SUBMIT_RESPONSE" | jq 'if has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "$TASK" | jq -r '.id')
if [ -z "$PREDICTION_ID" ] || [ "$PREDICTION_ID" = "null" ]; then
printf 'Submission response did not contain a prediction id
' >&2
exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/$PREDICTION_ID/result"
# 2. Poll until the prediction finishes.
while true; do
RESPONSE=$(curl --silent --show-error --fail-with-body "$RESULT_URL" \
-H "Authorization: Bearer $WAVESPEED_API_KEY")
RESULT=$(printf '%s' "$RESPONSE" | jq 'if has("data") then .data else . end')
STATUS=$(printf '%s' "$RESULT" | jq -r '.status')
case "$STATUS" in
completed) printf '%s\n' "$RESULT" | jq '.outputs'; break ;;
failed|cancelled|timeout|deleted) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
*) sleep 2 ;;
esac
doneconst submitUrl = "https://api.wavespeed.ai/api/v3/wavespeed-ai/sam3-image";
const apiKey = process.env.WAVESPEED_API_KEY;
if (!apiKey) throw new Error('Set WAVESPEED_API_KEY');
async function requestJson(url, options = {}) {
const response = await fetch(url, options);
if (!response.ok) throw new Error(await response.text());
return response.json();
}
// 1. Submit the prediction.
const body = await requestJson(submitUrl, {
method: "POST",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
"apply_mask": true,
"output_format": "png"
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = `https://api.wavespeed.ai/api/v3/predictions/${task.id}/result`;
// 2. Poll until the prediction finishes.
while (true) {
const resultBody = await requestJson(resultUrl, {
headers: { "Authorization": `Bearer ${apiKey}` },
});
const result = resultBody.data ?? resultBody;
if (result.status === "completed") {
console.log(result.outputs);
break;
}
if (["failed", "cancelled", "timeout", "deleted"].includes(result.status)) throw new Error(JSON.stringify(result));
await new Promise(resolve => setTimeout(resolve, 2000));
}import json
import os
import time
from urllib.request import Request, urlopen
api_key = os.environ["WAVESPEED_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
"image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
"apply_mask": True,
"output_format": "png"
}
def request_json(url, data=None):
request = Request(url, data=data, headers=headers, method="POST" if data else "GET")
with urlopen(request) as response:
return json.load(response)
# 1. Submit the prediction.
body = request_json("https://api.wavespeed.ai/api/v3/wavespeed-ai/sam3-image", json.dumps(payload).encode())
task = body.get("data", body)
if not task.get("id"):
raise RuntimeError("Submission response did not contain a prediction id")
result_url = f"https://api.wavespeed.ai/api/v3/predictions/{task['id']}/result"
# 2. Poll until the prediction finishes.
while True:
result_body = request_json(result_url)
result = result_body.get("data", result_body)
status = result.get("status")
if status == "completed":
print(result.get("outputs", []))
break
if status in {"failed", "cancelled", "timeout", "deleted"}:
raise RuntimeError(result)
time.sleep(2)Sam3 Image is a WaveSpeedAI model for image processing, exposed as a REST API on WaveSpeedAI. SAM 3 is a unified foundation model for promptable image segmentation using text, points, or boxes to detect and segment objects. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.
POST your input parameters to the model's REST endpoint (shown in the API tab of this playground) with your WaveSpeedAI API key in the Authorization header. Submission returns a prediction ID. Poll the result endpoint starting around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. The playground generates Python, JavaScript, and cURL examples for submitting requests and polling results. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/wavespeed-ai/sam3-image.
Sam3 Image starts at $0.005 per run. That figure is the base price — the final charge scales with the parameters you set in the form (output size, length, count, references, or whatever knobs this model exposes), so a higher-quality or larger output costs more than a minimal one. The exact cost for your current input is shown live next to the Generate button before you submit, and the actual per-call charge is recorded on the prediction afterwards.
Key inputs: `prompt`, `image`, `apply_mask`, `box_prompts`, `output_format`, `point_prompts`. The full JSON schema (types, defaults, allowed values) is rendered above the Generate button and mirrored in the API reference at https://wavespeed.ai/docs/docs-api/wavespeed-ai/sam3-image.
Reported generation time on WaveSpeedAI is around 3 seconds per request. This is an estimate, not a latency guarantee; queue time and input settings can change the total wait. live status is visible in the prediction record.
Commercial usage rights depend on the model's license, set by its provider (WaveSpeedAI). Check the provider's applicable terms and WaveSpeedAI's Terms of Service before commercial use.