QUICKSTART
Quickstart for Arabic-ready, container-based GPU compute
This guide walks you from account setup to workload submission, including model selection for Arabic AI use cases.
DCP job execution runs via Ollama (Windows/Linux) or MLX (macOS Apple Silicon) inference engines.
Choose your role path
Start from the flow that matches your role. DCP keeps one consistent trust model: sovereign Saudi-hosted compute, Arabic-first model support, and OpenAI-compatible API.
I am a provider
Register your GPU (NVIDIA or Apple Silicon), download the 4 MB app, and go online. No Docker needed.
Start provider onboardingI am integrating API
Use auth and endpoint contracts for production-safe integration.
Open API integration startHow DCP Billing Works
- 1. Before execution, DCP places an estimate hold in halala from your wallet.
- 2. After completion, final cost is settled from actual runtime (not the estimate).
- 3. Any unused hold is returned to wallet balance in halala automatically.
100 halala = 1 SAR.
Current flow: wallet top-up in SAR, estimate hold before execution, completion-based settlement, and automatic return of any unused hold.
Renter onboarding checklist
Get your API key
PrepareRegister a renter account at dcp.sa/renter/register. You'll receive a renter API key — copy it from the dashboard and keep it private.
Top up your balance
FundFund wallet in SAR. Use the dashboard at dcp.sa/renter/billing, or call the API directly:
# Check available models (no auth needed) curl https://api.dcp.sa/v1/models
Response
{
"data": [
{
"id": "qwen3-30b-a3b",
"name": "Qwen3 30B-A3B (MoE)",
"provider_count": 1,
"context_length": 32768,
"max_vram_gb": 18
}
]
}Browse available GPUs
SelectFetch live providers from the marketplace and note the id for the compatible provider you choose:
# Run inference (OpenAI-compatible)
curl -X POST https://api.dcp.sa/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_RENTER_KEY" \
-d '{
"model": "qwen3-30b-a3b",
"messages": [{"role": "user", "content": "What is the capital of Saudi Arabia?"}],
"max_tokens": 100
}'Response
{
"id": "chatcmpl-abc123",
"model": "qwen3-30b-a3b",
"choices": [{
"message": {
"role": "assistant",
"content": "The capital of Saudi Arabia is Riyadh."
}
}],
"usage": {
"prompt_tokens": 15,
"completion_tokens": 12,
"total_tokens": 27
}
}provider.id for your job submit request.Submit a job
SubmitSubmit an LLM job and pass your renter key in the x-renter-key header:
# Python (drop-in OpenAI replacement)
from openai import OpenAI
client = OpenAI(
base_url="https://api.dcp.sa/v1",
api_key="YOUR_RENTER_KEY"
)
response = client.chat.completions.create(
model="qwen3-30b-a3b",
messages=[{"role": "user", "content": "Hello"}],
max_tokens=100
)
print(response.choices[0].message.content)Response
# Node.js
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.dcp.sa/v1",
apiKey: "YOUR_RENTER_KEY"
});
const response = await client.chat.completions.create({
model: "qwen3-30b-a3b",
messages: [{ role: "user", content: "Hello" }]
});
console.log(response.choices[0].message.content);Monitor job status
TrackPoll the job endpoint until status reaches completed, then fetch the output:
# Poll status curl https://api.dcp.sa/api/jobs/job-abc123 # Fetch output (returns 202 while running, 200 when completed) curl https://api.dcp.sa/api/jobs/job-abc123/output
Response
{
"type": "text",
"response": "Transformers are a neural network architecture...",
"billing": {
"actual_cost_halala": 188,
"refunded_halala": 12
}
}pending → queued → running → completedLogs are available at
GET /api/jobs/:id/logsSDK Quickstarts (Node, Python, CLI)
Use one SDK track at a time and verify key, connectivity, and completion before scaling.
Node.js SDK
Typed renter workflows from backend services.
Install
npm install openai
Submit + wait
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.dcp.sa/v1",
apiKey: process.env.DCP_RENTER_KEY,
});
const response = await client.chat.completions.create({
model: "qwen3-30b-a3b",
messages: [{ role: "user", content: "Explain transformer attention in 2 lines." }],
max_tokens: 100,
});
console.log(response.choices[0].message.content);Verify connectivity
// Check balance
const res = await fetch("https://api.dcp.sa/api/renters/me", {
headers: { "x-renter-key": process.env.DCP_RENTER_KEY }
});
const data = await res.json();
console.log(data.name, data.balance_halala + " halala");Expected: your renter profile JSON with email and balance fields.
Verification checklist
- Confirm your API key starts with dcp-renter-
- Confirm top-up response includes success=true and new_balance_halala
- Capture job_id from submit response before polling status