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.

1
2
3
4
5

DCP job execution runs in GPU-accelerated Docker containers.

Choose your role path

Start from the flow that matches your role. DCP keeps one consistent trust model: Saudi energy advantage, Arabic AI support, and containerized execution.

I am a renter

Follow the renter checklist and ship your first workload.

Open renter checklist

I am a provider

Register GPU hardware, install daemon, and move to heartbeat-ready.

Start provider onboarding

I am integrating API

Use auth and endpoint contracts for production-safe integration.

Open API integration start

How 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

  1. 1. Register accountOpen
  2. 2. Add wallet balanceOpen
  3. 3. Choose GPU in marketplaceOpen
  4. 4. Submit workloadOpen
  5. 5. Monitor output and logsOpen
1

Get your API key

Prepare

Register a renter account at dcp.sa/renter/register. You'll receive a renter API key — copy it from the dashboard and keep it private.

Keep your key safe. It authenticates all API calls and is shown once.
2

Top up your balance

Fund

Fund wallet in SAR. Use the dashboard at dcp.sa/renter/billing, or call the API directly:

curl -X POST https://dcp.sa/api/dc1/renters/topup \
  -H "x-renter-key: YOUR_RENTER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amount_sar": 10}'

Response

{
  "success": true,
  "topped_up_halala": 1000,
  "new_balance_halala": 1000
}
Billing in every flow is the same: estimate hold in halala before start, runtime settlement after completion, unused hold returned automatically.
3

Browse available GPUs

Select

Fetch live providers from the marketplace and note the id for the compatible provider you choose:

curl https://dcp.sa/api/dc1/marketplace

Response

{
  "providers": [
    {
      "id": 42,
      "gpu_model": "RTX 4090",
      "vram_gb": 24,
      "price_llm_halala_per_hr": 1200,
      "price_training_halala_per_hr": 1800,
      "is_live": true,
      "location": "Riyadh"
    }
  ],
  "total": 1
}
Save the provider.id for your job submit request.
4

Submit a job

Submit

Submit an LLM job and pass your renter key in the x-renter-key header:

curl -X POST https://dcp.sa/api/dc1/jobs/submit \
  -H "x-renter-key: YOUR_RENTER_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "provider_id": 42,
    "job_type": "llm_inference",
    "duration_minutes": 10,
    "params": {
      "model": "meta-llama/Llama-3-8B",
      "prompt": "Explain transformers in one paragraph"
    }
  }'

Response

{
  "success": true,
  "job": {
    "job_id": "job-abc123",
    "status": "pending",
    "cost_halala": 200,
    "provider_id": 42
  }
}
DCP holds an estimate before execution and reconciles against actual runtime when the job completes.
5

Monitor job status

Track

Poll the job endpoint until status reaches completed, then fetch the output:

# Poll status
curl https://dcp.sa/api/dc1/jobs/job-abc123

# Fetch output (returns 202 while running, 200 when completed)
curl https://dcp.sa/api/dc1/jobs/job-abc123/output

Response

{
  "type": "text",
  "response": "Transformers are a neural network architecture...",
  "billing": {
    "actual_cost_halala": 188,
    "refunded_halala": 12
  }
}
Status flow: pending → queued → running → completed
Logs are available at GET /api/jobs/:id/logs

SDK 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

# Check current SDK package names in /docs/sdk-guides before install

Submit + wait

import { DC1RenterClient } from '<YOUR_DCP_SDK_PACKAGE>'

const client = new DC1RenterClient({
  apiKey: process.env.DCP_RENTER_KEY!,
  baseUrl: 'https://api.dcp.sa',
})

  const job = await client.submitJob({
    provider_id: 42,
    job_type: 'llm_inference',
    duration_minutes: 5,
    container_spec: { image_type: 'vllm-serve' },
    params: { prompt: 'Explain transformer attention in 2 lines.' },
  })

  const completedJob = await client.waitForJob(job.job_id, { intervalMs: 3000, timeoutMs: 120000 })
  console.log(completedJob.status, completedJob.job_id)

Verify connectivity

const me = await client.me()
console.log(me.email, me.balance_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