Quick-Start Guide
This page skips over some details to get a new user uploading trajectories to the staging environment in 15 minutes.
Your first API calls
Using your client.key
and client.crt
, you can authenticate with the API:
The examples below show how to call that endpoint using the curl
command-line utility with the --key
and --cert
arguments, or the Python requests library with client certs:
Get operator information
The GET /api/v1/operator
endpoint allows you to see the contact information of all the operators in the system.
- cURL
- Python
$ curl --key client.key --cert client.crt -X 'GET' 'https://staging.space-safety.starlink.com/api/v1/operator' -H 'accept: text/plain'
import requests
s = requests.Session()
s.cert = ('path/to/client.crt', 'path/to/client.key')
response = s.get('https://staging.space-safety.starlink.com/api/v1/operator')
Create an object
The POST /api/v1/object
endpoint can be used to create a new object associated with your account. You'll need the UUID that is your operator_id
to create a new object. (in the examples below, 3fa85f64-5717-4562-b3fc-2c963f66afa6
) You'll also have to specify the object's hard-body radius (in meters), maneuverability, its NORAD ID, and a unique name:
- cURL
- Python
curl --key client.key --cert client.crt -X 'POST' \
'https://staging.space-safety.starlink.com/api/v1/object' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"hard_body_radius": 10,
"maneuverability": true,
"norad_id": 0,
"object_name": "MYSAT-1",
"operator_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}'
import requests
s = requests.Session()
s.cert = ('path/to/client.crt', 'path/to/client.key')
params = {
"hard_body_radius": 10,
"maneuverability": true,
"norad_id": 0,
"object_name": "MYSAT-1",
"operator_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
response = s.post('https://staging.space-safety.starlink.com/api/v1/operator')
The response will contain the UUID4 corresponding to the newly-created object. You can query objects associated with your account using the GET /api/v1/object
endpoint.
Upload a trajectory
Now that you've created an object associated with your account, you can upload a trajectory associated with that object via the POST /api/v1/trajectory
endpoint. You'll need a trajectory file in OEM format, the object ID from the previous step (we'll use 4411f40a-6153-4b0b-97d4-fe9e4f59b102
below), and a trajectory type (we'll use "hypothetical" for now, see "Trajectory Submission Types" for more information).
Here's a sample OEM file in the proper format. Modify the object name to match your newly-created object, and the timestamps to be in the future:
Sample OEM File
CCSDS_OEM_VERS = 3.0
CREATION_DATE = 2023-11-06T02:08:15.481374Z
ORIGINATOR = SPACEX/USA
META_START
OBJECT_NAME = STARLINK-3179
OBJECT_ID = 31790
CENTER_NAME = EARTH
REF_FRAME = ITRF
TIME_SYSTEM = UTC
START_TIME = 2023-11-06T02:09:42.000000Z
STOP_TIME = 2023-11-06T02:15:42.000000Z
META_STOP
2023-11-06T02:09:42.000000Z -4.542752e+03 -3.316417e+03 3.877276e+03 4.819418e+00 9.779460e-02 5.717377e+00
2023-11-06T02:10:42.000000Z -4.243593e+03 -3.304426e+03 4.211322e+03 5.149116e+00 3.012760e-01 5.413318e+00
2023-11-06T02:11:42.000000Z -3.925285e+03 -3.280348e+03 4.526387e+03 5.457463e+00 5.005622e-01 5.084935e+00
2023-11-06T02:12:42.000000Z -3.589152e+03 -3.244456e+03 4.821057e+03 5.743052e+00 6.949538e-01 4.733722e+00
2023-11-06T02:13:42.000000Z -3.236600e+03 -3.197065e+03 5.094009e+03 6.004573e+00 8.837872e-01 4.361276e+00
2023-11-06T02:14:42.000000Z -2.869109e+03 -3.138526e+03 5.344019e+03 6.240812e+00 1.066436e+00 3.969275e+00
2023-11-06T02:15:42.000000Z -2.488230e+03 -3.069228e+03 5.569967e+03 6.450669e+00 1.242312e+00 3.559489e+00
COVARIANCE_START
EPOCH = 2023-11-06T02:09:42.000000Z
COV_REF_FRAME = RTN
1.000000e+00
0.000000e+00 1.000000e+02
0.000000e+00 0.000000e+00 6.400000e-01
0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
EPOCH = 2023-11-06T02:10:42.000000Z
COV_REF_FRAME = RTN
1.000000e+00
0.000000e+00 1.000000e+02
0.000000e+00 0.000000e+00 6.400000e-01
0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
EPOCH = 2023-11-06T02:11:42.000000Z
COV_REF_FRAME = RTN
1.000000e+00
0.000000e+00 1.000000e+02
0.000000e+00 0.000000e+00 6.400000e-01
0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
EPOCH = 2023-11-06T02:12:42.000000Z
COV_REF_FRAME = RTN
1.000000e+00
0.000000e+00 1.000000e+02
0.000000e+00 0.000000e+00 6.400000e-01
0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
EPOCH = 2023-11-06T02:13:42.000000Z
COV_REF_FRAME = RTN
1.000000e+00
0.000000e+00 1.000000e+02
0.000000e+00 0.000000e+00 6.400000e-01
0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
EPOCH = 2023-11-06T02:14:42.000000Z
COV_REF_FRAME = RTN
1.000000e+00
0.000000e+00 1.000000e+02
0.000000e+00 0.000000e+00 6.400000e-01
0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
EPOCH = 2023-11-06T02:15:42.000000Z
COV_REF_FRAME = RTN
1.000000e+00
0.000000e+00 1.000000e+02
0.000000e+00 0.000000e+00 6.400000e-01
0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e-08
COVARIANCE_STOP
- cURL
- Python
curl \
--cert /path/to/client.crt \
--key /path/to/client.key -X 'POST' 'https://staging.space-safety.starlink.com/api/v1/trajectory' \
-H 'accept: application/json' -H 'Content-Type: application/json' \
-d "{\"file\": \"$(awk '{printf "%s\\n", $0}' /path/to/oem.txt)\", \"object_id\": \"4411f40a-6153-4b0b-97d4-fe9e4f59b102\", \"upload_type\": \"hypothetical\"}"
import requests
s = requests.Session()
s.cert = ('path/to/client.crt', 'path/to/client.key')
params = {
'object_id': '4411f40a-6153-4b0b-97d4-fe9e4f59b102',
'file': open(OEM_PATH, 'r').read(),
'upload_type': 'definitive'
}
response = s.post('https://staging.space-safety.starlink.com/api/v1/trajectory', json=params)
If you receive a 200
or 201
response, that means the system accepted your trajectory!
For more on trajectory requirements, trajectory types, and other optional parameters, see the Trajectories page
Next Steps
The next section will give a more in-depth overview into the architecture of the screening service.
The full API specification is available via the API Reference