Register a new RTSP camera at a caller-chosen id
Creates a new RtspCameraAggregate at the id in the URL. The id MUST be a UUID: it becomes the camera's object-storage prefix for life, so a name-shaped id is refused. Ownership is checked against the credentials — only an admin or a super API key may register on behalf of another owner/org; for anyone else ownerId/orgId must be their own or absent (403 otherwise). New clients should prefer POST /rtsp-cameras, which assigns the id and returns it. With video control enabled, encrypted source staging happens first and the response reports placementStatus=pending.
curl -X POST "https://api.spkey.co/rtsp-cameras/example_string/RegisterRtspCamera" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN (JWT)" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"cameraId": "example_string",
"name": "John Doe",
"rtspUrl": "example_string",
"username": "John Doe",
"password": "example_string",
"httpSnapshotUrl": "example_string",
"ownerId": "example_string",
"orgId": "example_string"
}'
import requests
import json
url = "https://api.spkey.co/rtsp-cameras/example_string/RegisterRtspCamera"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN (JWT)",
"X-API-Key": "YOUR_API_KEY"
}
data = {
"cameraId": "example_string",
"name": "John Doe",
"rtspUrl": "example_string",
"username": "John Doe",
"password": "example_string",
"httpSnapshotUrl": "example_string",
"ownerId": "example_string",
"orgId": "example_string"
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const response = await fetch("https://api.spkey.co/rtsp-cameras/example_string/RegisterRtspCamera", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN (JWT)",
"X-API-Key": "YOUR_API_KEY"
},
body: JSON.stringify({
"cameraId": "example_string",
"name": "John Doe",
"rtspUrl": "example_string",
"username": "John Doe",
"password": "example_string",
"httpSnapshotUrl": "example_string",
"ownerId": "example_string",
"orgId": "example_string"
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"encoding/json"
)
func main() {
data := []byte(`{
"cameraId": "example_string",
"name": "John Doe",
"rtspUrl": "example_string",
"username": "John Doe",
"password": "example_string",
"httpSnapshotUrl": "example_string",
"ownerId": "example_string",
"orgId": "example_string"
}`)
req, err := http.NewRequest("POST", "https://api.spkey.co/rtsp-cameras/example_string/RegisterRtspCamera", 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/example_string/RegisterRtspCamera')
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 = '{
"cameraId": "example_string",
"name": "John Doe",
"rtspUrl": "example_string",
"username": "John Doe",
"password": "example_string",
"httpSnapshotUrl": "example_string",
"ownerId": "example_string",
"orgId": "example_string"
}'
response = http.request(request)
puts response.body
{
"success": true,
"aggregateId": "example_string",
"version": 3.14,
"placementStatus": "pending",
"event": "null"
}
{
"success": true,
"aggregateId": "example_string",
"version": 3.14,
"placementStatus": "pending",
"event": "null"
}
{
"error": "Bad Request",
"message": "The request contains invalid parameters or malformed data",
"code": 400,
"details": [
{
"field": "email",
"message": "Invalid email format"
}
]
}
{
"error": "Unauthorized",
"message": "Authentication required. Please provide a valid API token",
"code": 401
}
{
"error": "Forbidden",
"message": "You don't have permission to access this resource",
"code": 403
}
{
"error": "Conflict",
"message": "The request conflicts with the current state of the resource",
"code": 409,
"details": "Resource already exists"
}
/rtsp-cameras/{id}/RegisterRtspCameraTarget 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.
RTSP camera UUID (aggregate id)
The media type of the request body
Camera UUID. OPTIONAL and redundant: the id in the URL is the camera, and this is filled in from it when omitted — a DIFFERENT value here is a 400 rather than a guess, because the two used to address different things (aggregate here, storage folder there). It must be a UUID: it becomes the camera's object-storage prefix for life. New clients should let the server assign it — POST /rtsp-cameras returns the id it minted — while an integration that keeps its own uuid4 as a correlation key may go on naming it.
Human-readable camera name
RTSP source URL (e.g. rtsp://1.2.3.4:554/stream)
RTSP authentication username
RTSP authentication password
Optional HTTP JPEG/PNG snapshot endpoint
B2C user ID who owns this camera. Must be the authenticated caller unless the caller is an admin or holds a super API key; omit it and the caller owns the camera.
B2B organisation that owns this camera. Same rule as ownerId: your own org, unless you are an admin or a super API key.
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.
Path Parameters
RTSP camera UUID (aggregate id)
Body
Camera UUID. OPTIONAL and redundant: the id in the URL is the camera, and this is filled in from it when omitted — a DIFFERENT value here is a 400 rather than a guess, because the two used to address different things (aggregate here, storage folder there). It must be a UUID: it becomes the camera's object-storage prefix for life. New clients should let the server assign it — POST /rtsp-cameras returns the id it minted — while an integration that keeps its own uuid4 as a correlation key may go on naming it.
Human-readable camera name
RTSP source URL (e.g. rtsp://1.2.3.4:554/stream)
RTSP authentication username
RTSP authentication password
Optional HTTP JPEG/PNG snapshot endpoint
B2C user ID who owns this camera. Must be the authenticated caller unless the caller is an admin or holds a super API key; omit it and the caller owns the camera.
B2B organisation that owns this camera. Same rule as ownerId: your own org, unless you are an admin or a super API key.
Responses
pendingrunning