Skip to main content

Jobs API

POST /api/silicon-mark/v1/jobs

Create a new benchmarking job. quick_mark is always included automatically.

Authorization

🔒OAuth2: OAuth2PasswordBearer
Flow type: password
Token URL: token

Request Body

The request body must be in application/json format.
FieldTypeRequiredDescriptionConstraints
namestringNoJob name (auto-generated if omitted)Max 60 characters
descriptionstringNoJob descriptionMax 512 characters
benchmarksarrayYesList of benchmarks to run. Each item is a benchmark id string or a {benchmark_id, config} object. quick_mark is always added if not present.No duplicate (id + config)
node_countintegerNoNumber of expected nodes[ 1 .. 256 ], default 1
tagsarrayNoJob tagsMax 10 tags, 50 chars each; certain special characters forbidden

Request Example

{
  "name": "GPU Benchmark Test",
  "description": "Testing new cluster",
  "benchmarks": [
    "quick_mark",
    {
      "benchmark_id": "cluster_network",
      "config": {}
    }
  ],
  "node_count": 4,
  "tags": ["production", "gpu"]
}

Responses

  • 201: Created
{
  "id": "7554621440",
  "name": "GPU Benchmark Test",
  "description": "Testing new cluster",
  "node_count": 4,
  "benchmarks": ["quick_mark", "cluster_network"],
  "tags": ["production", "gpu"],
  "token": "eyJ0eXAiOiJKV1Q...",
  "created_at": "2024-03-15T10:30:00Z",
  "expires_at": "2024-03-16T10:30:00Z"
}
  • 400: Bad Request
{
  "error": {
    "code": "PARAMETER_INCORRECT_VALUE",
    "message": "Benchmark 'unknown_benchmark' not found"
  }
}
  • 401: Unauthorized
{
  "error": {
    "code": "CLIENT_TOKEN_INVALID",
    "message": "Invalid or expired token"
  }
}
  • 409: Conflict
{
  "error": {
    "code": "RESOURCE_ALREADY_EXISTS",
    "message": "Job with name 'GPU Test' already exists"
  }
}

GET /api/silicon-mark/v1/jobs

List jobs with filtering and pagination.

Authorization

🔒OAuth2: OAuth2PasswordBearer
Flow type: password
Token URL: token

Query Parameters

FieldTypeRequiredDescriptionConstraints
pageintegerNoPage number>= 1, default 1
per_pageintegerNoItems per page[ 1 .. 300 ], default 20
sort_bystringNoField to sort by (created_at, started_at, ended_at, expires_at, name, state, node_count, current_nodes)default created_at
sort_orderstringNoSort directionasc or desc, default desc
statestringNoFilter by job statecreated, starting, running, completed, aborted, failed, completed_with_warnings
namestringNoFilter by name (partial match)Max 60 characters
benchmark_idstringNoFilter by benchmark in sequence
tagsarrayNoFilter by tags. Repeat the query param for multiple; a job must include all listed tags.Max 10
created_afterdatetimeNoJobs created after this timestampISO 8601
created_beforedatetimeNoJobs created before this timestampISO 8601
node_count_minintegerNoMinimum node count[ 1 .. 256 ]
node_count_maxintegerNoMaximum node count[ 1 .. 256 ]
include_resultsbooleanNoInclude GPU models and QuickMark aggregate resultsdefault false
includearrayNoOptional expansions: performance, performance_nodes (performance_nodes requires performance)
has_performance_databooleanNoWhen true, only jobs with scoreboard performance data are returned

Responses

  • 200: Successful Response
{
  "results": [
    {
      "id": "7554621440",
      "name": "GPU Benchmark Test",
      "token": "eyJ0eXAiOiJKV1Q...",
      "description": "Testing cluster",
      "state": "completed",
      "node_count": 4,
      "current_nodes": 4,
      "benchmark_sequence": [
        {
          "benchmark_id": "quick_mark",
          "config": null
        },
        {
          "benchmark_id": "cluster_network",
          "config": null
        }
      ],
      "tags": ["production"],
      "created_at": "2024-03-15T10:30:00Z",
      "started_at": "2024-03-15T10:35:00Z",
      "expires_at": "2024-03-16T10:30:00Z",
      "ended_at": "2024-03-15T11:45:00Z",
      "gpu_models": null,
      "quickmark_aggregate_results": null,
      "performance": null,
      "performance_nodes": null,
      "benchmarks": ["quick_mark", "cluster_network"]
    }
  ],
  "pagination": {
    "total": 42,
    "page": 1,
    "per_page": 20,
    "total_pages": 3,
    "has_next": true,
    "has_prev": false
  }
}

GET /api/silicon-mark/v1/jobs/tags

Get all unique tags from jobs belonging to the authenticated user. Scope depends on the user’s role (regular users see their own jobs; customer admins see all jobs in their customer; root admins/staff see all jobs).

Authorization

🔒OAuth2: OAuth2PasswordBearer
Flow type: password
Token URL: token

Responses

  • 200: Successful Response
{
  "tags": ["production", "testing", "gpu-benchmark", "provider: aws"]
}

GET /api/silicon-mark/v1/jobs/stats

Performance tab badge count: the number of jobs whose aggregated performance status is underperforming (same scope as the performance job list).

Authorization

🔒OAuth2: OAuth2PasswordBearer
Flow type: password
Token URL: token

Query Parameters

FieldTypeRequiredDescriptionConstraints
benchmark_idstringNoBenchmark that drives performance rowsdefault quick_mark (v1 supports quick_mark only)
namestringNoFilter by job name
tagsarrayNoFilter by tags (repeat for multiple; job must include all)
statestringNoFilter by job statedefault completed
sort_bystringNoField to sort bydefault created_at
sort_orderstringNoSort directionasc or desc, default desc

Responses

  • 200: Successful Response
{
  "alert_job_count": 4
}

GET /api/silicon-mark/v1/jobs/{job_id}

Get detailed information about a specific job. Tasks and all benchmark results are always included.

Authorization

🔒OAuth2: OAuth2PasswordBearer
Flow type: password
Token URL: token

Path Parameters

ParameterTypeRequiredDescription
job_idintegerYesThe job ID

Responses

  • 200: Successful Response
{
  "id": "7554621440",
  "name": "GPU Benchmark Test",
  "token": "eyJ0eXAiOiJKV1Q...",
  "description": "Testing cluster performance",
  "state": "completed",
  "node_count": 4,
  "current_nodes": 4,
  "benchmark_sequence": [
    { "benchmark_id": "quick_mark", "config": null },
    { "benchmark_id": "cluster_network", "config": null }
  ],
  "tags": ["production"],
  "created_at": "2024-03-15T10:30:00Z",
  "started_at": "2024-03-15T10:35:00Z",
  "expires_at": "2024-03-16T10:30:00Z",
  "ended_at": "2024-03-15T11:45:00Z",
  "benchmarks": ["quick_mark", "cluster_network"],
  "tasks": [
    {
      "id": "7554621441",
      "job_id": "7554621440",
      "machine_uuid": "550e8400-e29b-41d4-a716-446655440000",
      "machine_ip": "192.168.1.10",
      "state": "completed",
      "failed_message": null,
      "created_at": "2024-03-15T10:35:00Z",
      "started_at": "2024-03-15T10:35:30Z",
      "ended_at": "2024-03-15T11:40:00Z",
      "gpu_model": "NVIDIA A100-SXM4-80GB",
      "gpu_count": 8,
      "pdf_report_url": "https://...",
      "benchmark_results": {}
    }
  ],
  "benchmark_results": {
    "cluster_network": {
      "benchmark_id": "cluster_network",
      "benchmark_name": "Cluster Network",
      "started_at": "2024-03-15T10:40:00Z",
      "ended_at": "2024-03-15T10:55:00Z",
      "config": {},
      "results": {
        "avg_bandwidth_gbps": 45.2,
        "avg_latency": 0.8,
        "min_bandwidth_gbps": 42.1,
        "total_links_tested": 12
      },
      "state": "completed",
      "error_message": null
    }
  },
  "pdf_report_url": "https://...",
  "scoreboard_summary": null
}
  • 404: Not Found
{
  "error": {
    "code": "RESOURCE_NOT_FOUND",
    "message": "Job with id 7554621440 not found"
  }
}

GET /api/silicon-mark/v1/jobs/{job_id}/results

Get the result summary of this job.

Authorization

🔒OAuth2: OAuth2PasswordBearer
Flow type: password
Token URL: token

Path Parameters

ParameterTypeRequiredDescription
job_idintegerYesThe job ID

Query Parameters

FieldTypeRequiredDescriptionConstraints
include_display_namesbooleanNoInclude human-readable field namesdefault false

Responses

The response is a map keyed by benchmark_id, where each value is a cluster-level benchmark result object.
  • 200: Successful Response
{
  "cluster_network": {
    "benchmark_id": "cluster_network",
    "benchmark_name": "Cluster Network",
    "started_at": "2024-03-15T10:40:00Z",
    "ended_at": "2024-03-15T10:55:00Z",
    "config": {},
    "results": {
      "avg_bandwidth_gbps": 45.2,
      "avg_latency": 0.8,
      "min_bandwidth_gbps": 42.1,
      "total_links_tested": 12,
      "node_count": 4,
      "measurements": []
    },
    "state": "completed",
    "error_message": null
  }
}

DELETE /api/silicon-mark/v1/jobs/delete

Soft-delete a job and all associated tasks. Only the job owner (matching customer_id) can delete their jobs.

Authorization

🔒OAuth2: OAuth2PasswordBearer
Flow type: password
Token URL: token

Request Body

The request body must be in application/json format.
FieldTypeRequiredDescriptionConstraints
idintegerYesJob ID to delete>= 1

Request Example

{
  "id": 7554621440
}

Responses

  • 200: Job successfully deleted
{
  "message": "Job deleted successfully",
  "requires_agent_stop": false
}
  • 400: Bad Request — job is in a state that prevents deletion (e.g. running)
  • 403: Permission denied — user does not own this job
  • 404: Not Found — job not found

The following job endpoints are intentionally not documented here because they are not customer-facing:
  • POST /api/silicon-mark/v1/jobs/anonymous — internal anonymous job creation flow.
  • GET /api/silicon-mark/v1/jobs/current — agent-only; authenticated with a job token, used by the benchmarking agent to fetch its job configuration.
  • POST /api/silicon-mark/v1/jobs/{job_id}/generate-report — marked INTERNAL TESTING; agent/job-token only.