Model API setup guide

Connect your tools, make your first request, and understand usage and billing.

Start with credit, not a subscription

  1. Sign in with a passkey and open Model API in your account.
  2. Add US$20, US$50 or US$100 when top-ups are open.
  3. Create a key with a lifetime spending limit and an expiry. Copy it once.
  4. Set your tool’s base URL to https://bountyoperator.com/v1 and use a model ID from the live catalog.

API credit and the Operator review subscription are separate purchases. The US$10 monthly Operator plan includes US$2 in API credit per paid month, and optional automatic top-ups stay off unless you turn them on.

Python quickstart

Use the OpenAI Python client. Set BOUNTY_OPERATOR_API_KEY to your key and BOUNTY_OPERATOR_MODEL to a model ID from the catalog. Choose a model with streaming support for this example. Keep your key outside source control.

Terminal
python -m pip install openai
Python
from openai import OpenAI
import os

client = OpenAI(
    api_key=os.environ["BOUNTY_OPERATOR_API_KEY"],
    base_url="https://bountyoperator.com/v1",
    timeout=1200.0,
    max_retries=0,
)

# Discover the catalog your harness can use.
for model in client.models.list().data:
    print(model.id, getattr(model, "capabilities", []))

for chunk in client.chat.completions.create(
    model=os.environ["BOUNTY_OPERATOR_MODEL"],
    messages=[{"role": "user", "content": "Review this authorized test case..."}],
    max_tokens=2048,
    stream=True,
    stream_options={"include_usage": True},
):
    if chunk.choices:
        print(chunk.choices[0].delta.content or "", end="")
    if chunk.usage:
        print("\nUsage:", chunk.usage)

Clients must support the Chat Completions API. Anthropic’s Messages API, OpenAI Responses, images, audio and embeddings are not supported by this endpoint.

See the model list in your harness

Add an OpenAI-compatible provider with base URL https://bountyoperator.com/v1 and your Bounty Operator API key. Use the harness’s refresh or discover models action. It can fetch every available model from GET /v1/models. Model discovery is free and does not start a GPU worker.

If your harness requires a model ID manually, copy one from the live catalog. Choose a model with the tools capability for agent workflows. Chat-only models can answer questions, but cannot drive a tool loop. Streaming and structured output are also listed per model. The model selection guide explains how to compare capabilities, cost and benchmark evidence.

Every entry includes its context and output limits, token rates, minimum charge and hosting provider. Source, revision and quantization details are included where published; a managed provider may not disclose the exact weights it serves. The list in your account and the API use the same catalog.

Endpoints and parameters

MethodPathReturns
GET/v1/modelsAvailable models, limits and rates
GET/v1/models/{model_id}One model’s hosting, source details, capabilities, limits and rates
POST/v1/chat/completionsA response or SSE stream using the selected model’s capabilities
GET/v1/usageYour available wallet and this key’s spending limit

Authenticate with Authorization: Bearer YOUR_KEY. Chat requests accept text messages, tools, tool_choice, parallel_tool_calls, response_format, temperature, top_p, top_k, penalties, seed and stop. Set either max_tokens or max_completion_tokens. Only one completion per request is supported.

For models that list chat_template_kwargs.enable_thinking as their reasoning control, extra_body={"chat_template_kwargs": {"enable_thinking": False}} disables thinking in the Python client. Other models can use a different control; check their catalog entry. Reasoning tokens count as output tokens.

Requests are limited to 256 messages, 32 tools and 8 MiB of JSON. The gateway also checks the UTF-8 byte size of messages, tools and response schemas, with room reserved for templates and your requested output. This conservative check can reject input that would fit the provider’s token window; shorten the input or reduce the output limit. Each account can run two requests at once. The service accepts four requests at once across accounts. When capacity is full, a 429 response includes a retry delay.

Set stream_options.include_usage to receive token counts at the end of a stream. If a provider reports usage only at completion, the gateway holds its output until those counts arrive, so the answer may appear all at once. An interrupted stream may end with a coded error. Use the request ID to find its charge in your account.

An optional Idempotency-Key prevents the same key from starting twice for 30 days. A repeat returns 409; responses are not stored for replay. Use a new value only when you intend to start a new generation.

How requests are charged

The live catalog and /v1/models show the current input rate, output rate and minimum request charge. The charge is the greater of the token cost or that minimum whenever usage has been confirmed, including an interrupted request. A request with no confirmed usage is not charged.

Before generation, enough credit is reserved for the model’s full input context and your requested output limit. The final charge uses the model’s confirmed token counters and cannot exceed the reserved amount. Reported counts are retained even if the provider exceeds that limit. The unused reservation is released when the request ends. Keep enough available credit for the reservation as well as the expected charge.

Keys stop spending at their lifetime limit. A refund or chargeback removes the corresponding credit and may suspend further requests until the balance is settled. Unused credit does not expire; see the API credit terms for refunds.

The first request to a self-hosted model after idle can take longer while its worker starts. A timeout is not a completed answer. The gateway allows up to ten minutes for startup and five minutes for generation. Set a twenty-minute client timeout (1200 seconds) and respect retry headers. An unsettled credit reservation expires after twenty minutes.

Your content passes through

Requests pass through Cloudflare to the hosting provider shown for your selected model. We do not log prompts or responses in our application or save them in our database. Our self-hosted vLLM deployments on RunPod also disable content logging and cross-request prefix caching.

Managed models run through Infron or OrcaRouter, whose terms and retention policies also apply, including those of any downstream model provider. Managed models do not come with a zero-retention guarantee.

We retain API key hashes, limits, token counts and billing records. Recent request metadata is deleted after 30 days. Infrastructure providers process traffic under their own policies. Read the full data handling details.

For authorized security work

The catalog shows each model’s available source, revision, quantization and license details. A managed model’s exact revision or quantization may be unpublished. “Uncensored” describes the publisher’s model family; it does not promise zero refusals or correct findings. Compatibility checks cover serving and API behavior, not security benchmark performance. Check scope, evidence and conclusions yourself.

Use the service only on code, data and systems you are authorized to assess. The API generates text and tool calls; your client controls whether a tool executes. Read the linked publisher model card for its license, intended use and restrictions. DeepHat includes additional use restrictions. Foundation-Sec is built with Llama 3.1 and carries the Llama 3.1 Community License alongside Cisco’s Apache 2.0 changes.

Sign in

Account

Confirm it's you