Register an RTSP camera owned by the caller
Creates a camera and returns the id the server assigned to it — the id is the camera's storage prefix, so it is never taken from the request. Ownership follows the credentials: a JWT creates a B2C camera for that user, an org API key an org-owned one. Use the returned cameraId on every later call.
curl -X POST "https://api.spkey.co/rtsp-cameras" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN (JWT)" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"name": "John Doe",
"rtspUrl": "example_string",
"username": "John Doe",
"password": "example_string",
"httpSnapshotUrl": "example_string"
}'
import requests
import json
url = "https://api.spkey.co/rtsp-cameras"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN (JWT)",
"X-API-Key": "YOUR_API_KEY"
}
data = {
"name": "John Doe",
"rtspUrl": "example_string",
"username": "John Doe",
"password": "example_string",
"httpSnapshotUrl": "example_string"
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const response = await fetch("https://api.spkey.co/rtsp-cameras", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN (JWT)",
"X-API-Key": "YOUR_API_KEY"
},
body: JSON.stringify({
"name": "John Doe",
"rtspUrl": "example_string",
"username": "John Doe",
"password": "example_string",
"httpSnapshotUrl": "example_string"
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"encoding/json"
)
func main() {
data := []byte(`{
"name": "John Doe",
"rtspUrl": "example_string",
"username": "John Doe",
"password": "example_string",
"httpSnapshotUrl": "example_string"
}`)
req, err := http.NewRequest("POST", "https://api.spkey.co/rtsp-cameras", bytes.NewBuffer(data))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN (JWT)")
req.Header.Set("X-API-Key", "YOUR_API_KEY")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://api.spkey.co/rtsp-cameras')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer YOUR_API_TOKEN (JWT)'
request['X-API-Key'] = 'YOUR_API_KEY'
request.body = '{
"name": "John Doe",
"rtspUrl": "example_string",
"username": "John Doe",
"password": "example_string",
"httpSnapshotUrl": "example_string"
}'
response = http.request(request)
puts response.body
{
"success": true,
"cameraId": "example_string",
"version": 3.14,
"placementStatus": "pending"
}
{
"error": "Unauthorized",
"message": "Authentication required. Please provide a valid API token",
"code": 401
}
{
"error": "Conflict",
"message": "The request conflicts with the current state of the resource",
"code": 409,
"details": "Resource already exists"
}
/rtsp-cameras
Target server for requests. Edit to use your own host.
JWT token from SmartphoneKey authentication. Identifies the B2C user or B2B service.
API key for B2B organization access. Provided during organization onboarding.
The media type of the request body
Human-readable camera name, shown in the app
RTSP source URL (e.g. rtsp://1.2.3.4:554/stream)
RTSP authentication username
RTSP authentication password
Optional HTTP JPEG/PNG snapshot endpoint
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token (JWT). JWT token from SmartphoneKey authentication. Identifies the B2C user or B2B service.
API Key for authentication. API key for B2B organization access. Provided during organization onboarding.
Body
Human-readable camera name, shown in the app
RTSP source URL (e.g. rtsp://1.2.3.4:554/stream)
RTSP authentication username
RTSP authentication password
Optional HTTP JPEG/PNG snapshot endpoint
Responses
trueServer-assigned camera UUID — use it on every later call
pendingrunning