Services
Create Service
Create or update a service definition.
PUT
/
v1
/
sprites
/
{name}
/
services
/
{service_name}
Create Service
curl --request PUT \
--url https://api.sprites.dev/v1/sprites/{name}/services/{service_name} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"args": [
"-m",
"http.server",
"8000"
],
"cmd": "python",
"http_port": 8000,
"needs": [
"postgres"
]
}
'import requests
url = "https://api.sprites.dev/v1/sprites/{name}/services/{service_name}"
payload = {
"args": ["-m", "http.server", "8000"],
"cmd": "python",
"http_port": 8000,
"needs": ["postgres"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
args: ['-m', 'http.server', '8000'],
cmd: 'python',
http_port: 8000,
needs: ['postgres']
})
};
fetch('https://api.sprites.dev/v1/sprites/{name}/services/{service_name}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sprites.dev/v1/sprites/{name}/services/{service_name}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'args' => [
'-m',
'http.server',
'8000'
],
'cmd' => 'python',
'http_port' => 8000,
'needs' => [
'postgres'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sprites.dev/v1/sprites/{name}/services/{service_name}"
payload := strings.NewReader("{\n \"args\": [\n \"-m\",\n \"http.server\",\n \"8000\"\n ],\n \"cmd\": \"python\",\n \"http_port\": 8000,\n \"needs\": [\n \"postgres\"\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.sprites.dev/v1/sprites/{name}/services/{service_name}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"args\": [\n \"-m\",\n \"http.server\",\n \"8000\"\n ],\n \"cmd\": \"python\",\n \"http_port\": 8000,\n \"needs\": [\n \"postgres\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sprites.dev/v1/sprites/{name}/services/{service_name}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"args\": [\n \"-m\",\n \"http.server\",\n \"8000\"\n ],\n \"cmd\": \"python\",\n \"http_port\": 8000,\n \"needs\": [\n \"postgres\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"args": [
"-m",
"http.server",
"8000"
],
"cmd": "python",
"http_port": 8000,
"name": "webapp",
"needs": [
"postgres"
],
"state": {
"name": "webapp",
"started_at": "2026-01-05T10:30:00Z",
"status": "starting"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Time to monitor logs after starting (default: 5s)
Body
application/json
Command arguments
Command to execute
Service dependencies (started first)
Working directory for the service
Environment variables to add to the base service environment
HTTP port for proxy routing
Response
Success
Command arguments
Command to execute
Service name
Service dependencies
HTTP port for proxy routing
Current runtime state
Show child attributes
Show child attributes
Example:
{
"name": "webapp",
"pid": 1567,
"started_at": "2026-01-05T08:01:00Z",
"status": "running"
}
⌘I
Create Service
curl --request PUT \
--url https://api.sprites.dev/v1/sprites/{name}/services/{service_name} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"args": [
"-m",
"http.server",
"8000"
],
"cmd": "python",
"http_port": 8000,
"needs": [
"postgres"
]
}
'import requests
url = "https://api.sprites.dev/v1/sprites/{name}/services/{service_name}"
payload = {
"args": ["-m", "http.server", "8000"],
"cmd": "python",
"http_port": 8000,
"needs": ["postgres"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
args: ['-m', 'http.server', '8000'],
cmd: 'python',
http_port: 8000,
needs: ['postgres']
})
};
fetch('https://api.sprites.dev/v1/sprites/{name}/services/{service_name}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sprites.dev/v1/sprites/{name}/services/{service_name}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'args' => [
'-m',
'http.server',
'8000'
],
'cmd' => 'python',
'http_port' => 8000,
'needs' => [
'postgres'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sprites.dev/v1/sprites/{name}/services/{service_name}"
payload := strings.NewReader("{\n \"args\": [\n \"-m\",\n \"http.server\",\n \"8000\"\n ],\n \"cmd\": \"python\",\n \"http_port\": 8000,\n \"needs\": [\n \"postgres\"\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.sprites.dev/v1/sprites/{name}/services/{service_name}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"args\": [\n \"-m\",\n \"http.server\",\n \"8000\"\n ],\n \"cmd\": \"python\",\n \"http_port\": 8000,\n \"needs\": [\n \"postgres\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sprites.dev/v1/sprites/{name}/services/{service_name}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"args\": [\n \"-m\",\n \"http.server\",\n \"8000\"\n ],\n \"cmd\": \"python\",\n \"http_port\": 8000,\n \"needs\": [\n \"postgres\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"args": [
"-m",
"http.server",
"8000"
],
"cmd": "python",
"http_port": 8000,
"name": "webapp",
"needs": [
"postgres"
],
"state": {
"name": "webapp",
"started_at": "2026-01-05T10:30:00Z",
"status": "starting"
}
}