Private jobs are B3IQ-native async APIs, not hosted OpenAI chat. They are used for encrypted private transport workflows against a fully enrolled machine on your own account — node_id is required, and a customer-token caller who targets a machine they don't own gets a 403 Node not owned.

Privacy wording matters

Current private jobs are private from the B3IQ control plane, gateway, hosted playground, router accounting, billing exports, and public explorer payloads. They are not yet a claim that prompts and outputs are hidden from the node operator.

Create A Direct Private Job

Seal the request first with the private-transport helper. Send only the encrypted request envelope to B3IQ. Use B3IQ_GATEWAY_BASE_URL=https://b3iq.org/v1/api for the public hosted gateway facade. B3IQ_PRIVATE_NODE_ID must be a fully enrolled machine on your own account — jobs are free and unmetered, like any other request served by machines you own.

javascript
import { readFileSync } from "node:fs";const baseURL = process.env.B3IQ_GATEWAY_BASE_URL;const customerID = process.env.B3IQ_CUSTOMER_ID;const nodeID = process.env.B3IQ_PRIVATE_NODE_ID;const customerToken = readFileSync(process.env.B3IQ_CUSTOMER_TOKEN_FILE, "utf8").trim();const encryptedRequest = JSON.parse(readFileSync(process.env.B3IQ_ENCRYPTED_REQUEST_FILE, "utf8"));const response = await fetch(`${baseURL}/private-inference/jobs`, { method: "POST", headers: { "content-type": "application/json", "x-b3iq-customer-id": customerID, "x-b3iq-customer-token": customerToken }, body: JSON.stringify({ job_id: process.env.B3IQ_PRIVATE_JOB_ID, node_id: nodeID, model_id: "qwen3-8b", encrypted_request: encryptedRequest })});console.log(await response.json());

Envelope Contract

Accepted b3iq-private-transport-v1 request envelope fields:

FieldPurpose
versionEnvelope version marker
key_idNode transport key identifier
algorithmEncryption algorithm
client_public_key_x25519Client public key for X25519 key exchange
nonceEncryption nonce
ciphertextEncrypted request payload
aad_hashOptional associated-data hash

Extra request fields are rejected before dispatch so plaintext cannot be smuggled into D1 under encrypted_request.

Job Lifecycle

1

Client verifies policy

For current private transport, the client selects an enrolled node and transport key. Future verified-confidential jobs also verify TEE attestation before encryption.

2

Client seals payload

The plaintext request is encrypted to the node transport key and bound with associated data such as b3iq-private-inference:<job_id>.

3

Control plane queues ciphertext

B3IQ stores job state, settlement state, ciphertext envelope, and public metadata. It does not store the plaintext prompt or output.

4

Node claims and executes

The host agent receives the encrypted job through command polling, decrypts, executes against local runtime, and returns an encrypted result envelope.

5

Receipt records

The result can include a signed receipt hash, recorded as public-safe evidence. Private jobs on your own machines are free — nothing is billed or paid out.

Read Job State

text
GET /v1/api/private-inference/jobs/{job_id}

The response returns job status and encrypted result fields. It must not return plaintext request or response bodies.

Async Completion (Webhook)

A create request can include an optional webhook_url. When set, B3IQ posts a notification to that URL once the job reaches a terminal state, so you do not have to poll. The job-state response then also reports delivery progress:

FieldPurpose
webhook_statusDelivery state of the completion callback
webhook_attemptsNumber of delivery attempts made
webhook_delivered_atTimestamp of successful delivery, when delivered

Privacy Classes

ClassStatusMeaning
private_transportActiveClient encrypts to node transport key. Protects content from B3IQ services and public surfaces, not from the node operator.
verified_confidential_cpuPlannedRequires verified TEE attestation, transport key binding, freshness policy, and receipt evidence.
verified_confidential_gpuLaterRequires practical confidential GPU hardware, drivers, and attestation tooling.

See Protocol privacy for the full privacy boundary.

Ask a question... ⌘I