Jobs
POST https://app.meris.network/v1/jobsRuns a container image on one or more GPUs that match what you ask for.
Request body
| Field | Type | Notes |
|---|---|---|
image | string | Required. A container image reference, for example ghcr.io/acme/finetune:latest. Public images only during early access. |
command | array of strings | What to run inside the image. Defaults to the image's own entrypoint. At most 64 arguments. |
env | object | Environment variables as string values. At most 64, each under 4,096 characters. |
gpu.min_vram_gb | number | Minimum memory per card, 1 to 80. Default 8. |
gpu.count | integer | Cards to run on, 1 to 8. Default 1. |
max_hours | number | Required. The job is stopped after this long, 0.1 to 72. |
The network places the job on the cheapest GPU type that has enough memory and enough cards online.
Response
A placed job answers 202 Accepted:
{
"id": "job_6e213d1849234a128f5d68de",
"object": "job",
"status": "starting",
"gpu": { "name": "<gpu name>", "vram_gb": 24, "count": 1 },
"usd_per_gpu_hour": "<market rate when the job started>",
"max_hours": 4,
"created": 1790931138
}When nothing matching is free, the API answers 503 no_capacity and nothing is charged. See Errors and limits.
Billing
A job costs GPU-hours × usd_per_gpu_hour, where GPU-hours is the time it ran multiplied by gpu.count. The rate is fixed when the job starts, even if the market moves while it runs.
Before placing a job the API checks that your credit covers the whole max_hours at that rate. If it does not, the request fails with 402 and tells you the most the job could cost. You are only billed for the time the job actually ran.
The API page in the app lists your recent jobs, how long each ran and what it cost.
