Citra Space Images API
The images API from Citra Space — 6 operation(s) for images.
The images API from Citra Space — 6 operation(s) for images.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/citra-space:citra-space-images-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: SOICAT Images API
version: 0.1.0
tags:
- name: Images
paths:
/images/{upload_id}/data:
get:
description: 'Get FITS image data formatted for Plotly heatmap visualization with ZScale contrast and region overlays.
Returns the processed FITS image data as a 2D array along with statistics and region data.
If use_original is True, returns the original uploaded file instead.'
operationId: get_fits_image_data_images__upload_id__data_get
parameters:
- description: Upload ID to get image data for
in: path
name: upload_id
required: true
schema:
description: Upload ID to get image data for
format: uuid
title: Upload Id
type: string
- description: Binning factor for downsampling (1=full res, 2=half res, 4=quarter res, etc.)
in: query
name: bin_factor
required: false
schema:
default: 1
description: Binning factor for downsampling (1=full res, 2=half res, 4=quarter res, etc.)
maximum: 8
minimum: 1
title: Bin Factor
type: integer
- description: Return original file instead of processed file
in: query
name: use_original
required: false
schema:
default: false
description: Return original file instead of processed file
title: Use Original
type: boolean
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/FITSImageDataResponse'
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
summary: Get Fits Image Data
tags:
- Images
/my/images:
get:
description: Get all uploaded images for the current user
operationId: list_my_images_my_images_get
parameters: []
responses:
'200':
content:
application/json:
schema:
items:
$ref: '#/components/schemas/UploadListItemResponse'
title: Response List My Images My Images Get
type: array
description: Successful Response
summary: List My Images
tags:
- Images
post:
operationId: upload_initiate_my_images_post
parameters:
- description: FITS filename with valid extension (.fits, .fit, .fts)
in: query
name: filename
required: true
schema:
description: FITS filename with valid extension (.fits, .fit, .fts)
maxLength: 255
minLength: 5
pattern: ^.+\.(fits|fit|fts)$
title: Filename
type: string
- description: Telescope ID to upload image to
in: query
name: telescope_id
required: true
schema:
description: Telescope ID to upload image to
format: uuid
title: Telescope Id
type: string
- description: File size in bytes
in: query
name: file_size
required: true
schema:
description: File size in bytes
minimum: 1
title: File Size
type: integer
- description: Optional task ID to associate with this upload
in: query
name: task_id
required: false
schema:
anyOf:
- format: uuid
type: string
- type: 'null'
description: Optional task ID to associate with this upload
- description: Optional maximum number of sources to detect (defaults to 50)
in: query
name: max_sources
required: false
schema:
anyOf:
- maximum: 200
minimum: 1
type: integer
- type: 'null'
default: 50
description: Optional maximum number of sources to detect (defaults to 50)
- description: Optional field of view in degrees (defaults to sensor FOV)
in: query
name: fov
required: false
schema:
anyOf:
- maximum: 180
minimum: 0.1
type: number
- type: 'null'
description: Optional field of view in degrees (defaults to sensor FOV)
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UploadInitiateResponse'
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
summary: Upload Initiate
tags:
- Images
/my/images/{upload_id}:
delete:
description: Delete an uploaded image and its associated S3 files
operationId: delete_image_my_images__upload_id__delete
parameters:
- description: Upload ID to delete
in: path
name: upload_id
required: true
schema:
description: Upload ID to delete
format: uuid
title: Upload Id
type: string
responses:
'204':
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
summary: Delete Image
tags:
- Images
get:
description: Get the processing status of an uploaded image
operationId: get_upload_status_my_images__upload_id__get
parameters:
- description: Upload ID to check status for
in: path
name: upload_id
required: true
schema:
description: Upload ID to check status for
format: uuid
title: Upload Id
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UploadStatusResponse'
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
summary: Get Upload Status
tags:
- Images
/satellites/{satellite_id}/images:
get:
description: 'Get all image statuses for tasks associated with a specific satellite.
Requires **satellite** read access — 404 when the satellite is absent or the
caller cannot read it.
Deliberately a different axis from `/tasks/{task_id}/images`, which gates on the
task''s sensor. Both list the same `fits_upload` rows, but the question differs and
satellite tier is the one that carries sensitivity: a restricted satellite''s
imagery stays gated no matter whose telescope took it. The consequence is real and
intended — a STANDARD user can own the telescope, own the task, and still 404 here
if the target satellite is above their tier. Gating on the sensor instead would let
sensor ownership launder access to a satellite the caller cannot read.'
operationId: get_satellite_image_statuses_satellites__satellite_id__images_get
parameters:
- description: Satellite ID to get image statuses for
in: path
name: satellite_id
required: true
schema:
description: Satellite ID to get image statuses for
format: uuid
title: Satellite Id
type: string
- description: Maximum number of uploads to return
in: query
name: limit
required: false
schema:
default: 250
description: Maximum number of uploads to return
maximum: 1000
minimum: 1
title: Limit
type: integer
- description: Number of uploads to skip
in: query
name: offset
required: false
schema:
default: 0
description: Number of uploads to skip
minimum: 0
title: Offset
type: integer
responses:
'200':
content:
application/json:
schema:
items:
$ref: '#/components/schemas/UploadStatusResponse'
title: Response Get Satellite Image Statuses Satellites Satellite Id Images Get
type: array
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
summary: Get Satellite Image Statuses
tags:
- Images
/tasks/{task_id}/images:
get:
description: 'Get all image statuses for a specific task.
Requires read access to the task''s sensor — 404 when the task is absent or
the caller cannot read it, matching `GET /tasks/{task_id}/report`.'
operationId: get_task_image_statuses_tasks__task_id__images_get
parameters:
- description: Task ID to get image statuses for
in: path
name: task_id
required: true
schema:
description: Task ID to get image statuses for
format: uuid
title: Task Id
type: string
responses:
'200':
content:
application/json:
schema:
items:
$ref: '#/components/schemas/UploadStatusResponse'
title: Response Get Task Image Statuses Tasks Task Id Images Get
type: array
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
summary: Get Task Image Statuses
tags:
- Images
/telescopes/{telescope_id}/images:
get:
description: 'Get image statuses for a specific telescope with pagination.
Requires telescope read access (tier/group + scenario filter) — 404 when the
telescope is absent or the caller cannot read it, matching `get_telescope`.
Once the telescope is readable, all users'' uploads on it are listed (that is
the page''s purpose); the presigned URLs are scoped per row as before.'
operationId: get_telescope_image_statuses_telescopes__telescope_id__images_get
parameters:
- description: Telescope ID to get image statuses for
in: path
name: telescope_id
required: true
schema:
description: Telescope ID to get image statuses for
format: uuid
title: Telescope Id
type: string
- description: Maximum number of uploads to return
in: query
name: limit
required: false
schema:
default: 250
description: Maximum number of uploads to return
maximum: 1000
minimum: 1
title: Limit
type: integer
- description: Number of uploads to skip
in: query
name: offset
required: false
schema:
default: 0
description: Number of uploads to skip
minimum: 0
title: Offset
type: integer
- description: Only uploads created at/after this time
in: query
name: startAfter
required: false
schema:
anyOf:
- format: date-time
type: string
- type: 'null'
description: Only uploads created at/after this time
- description: Only uploads created before this time
in: query
name: endBefore
required: false
schema:
anyOf:
- format: date-time
type: string
- type: 'null'
description: Only uploads created before this time
- description: Filter by upload status
in: query
name: status
required: false
schema:
anyOf:
- items:
$ref: '#/components/schemas/ImageStatus'
type: array
- type: 'null'
description: Filter by upload status
responses:
'200':
content:
application/json:
schema:
items:
$ref: '#/components/schemas/UploadStatusResponse'
title: Response Get Telescope Image Statuses Telescopes Telescope Id Images Get
type: array
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
summary: Get Telescope Image Statuses
tags:
- Images
components:
schemas:
UploadStatusResponse:
properties:
catalogDownloadUrl:
anyOf:
- type: string
- type: 'null'
checksum:
anyOf:
- type: string
- type: 'null'
createdAt:
format: date-time
title: Createdat
type: string
detail:
anyOf:
- type: string
- type: 'null'
expiresAt:
format: date-time
title: Expiresat
type: string
fitsDownloadUrl:
anyOf:
- type: string
- type: 'null'
fov:
anyOf:
- type: number
- type: 'null'
maxSources:
anyOf:
- type: integer
- type: 'null'
originalFilename:
title: Originalfilename
type: string
status:
$ref: '#/components/schemas/ImageStatus'
taskId:
anyOf:
- format: uuid
type: string
- type: 'null'
telescopeId:
format: uuid
title: Telescopeid
type: string
telescopeName:
anyOf:
- type: string
- type: 'null'
uploadId:
format: uuid
title: Uploadid
type: string
userId:
format: uuid
title: Userid
type: string
username:
anyOf:
- type: string
- type: 'null'
required:
- uploadId
- userId
- telescopeId
- originalFilename
- status
- expiresAt
- createdAt
title: UploadStatusResponse
type: object
UploadListItemResponse:
properties:
createdAt:
format: date-time
title: Createdat
type: string
detail:
anyOf:
- type: string
- type: 'null'
expiresAt:
format: date-time
title: Expiresat
type: string
fov:
anyOf:
- type: number
- type: 'null'
maxSources:
anyOf:
- type: integer
- type: 'null'
originalFilename:
title: Originalfilename
type: string
status:
$ref: '#/components/schemas/ImageStatus'
taskId:
anyOf:
- format: uuid
type: string
- type: 'null'
telescopeId:
format: uuid
title: Telescopeid
type: string
telescopeName:
anyOf:
- type: string
- type: 'null'
uploadId:
format: uuid
title: Uploadid
type: string
userId:
format: uuid
title: Userid
type: string
username:
anyOf:
- type: string
- type: 'null'
required:
- uploadId
- userId
- telescopeId
- originalFilename
- status
- expiresAt
- createdAt
title: UploadListItemResponse
type: object
RegionPolygon:
description: Polygon region overlay
properties:
color:
title: Color
type: string
label:
anyOf:
- type: string
- type: 'null'
xCoords:
items:
type: number
title: Xcoords
type: array
yCoords:
items:
type: number
title: Ycoords
type: array
required:
- xCoords
- yCoords
- color
title: RegionPolygon
type: object
FITSImageDataResponse:
description: Response model for FITS image data formatted for Plotly heatmap
properties:
circles:
default: []
items:
$ref: '#/components/schemas/RegionCircle'
title: Circles
type: array
headers:
additionalProperties:
type: string
default: {}
title: Headers
type: object
height:
title: Height
type: integer
imageData:
title: Imagedata
type: string
maxValue:
title: Maxvalue
type: number
meanValue:
title: Meanvalue
type: number
minValue:
title: Minvalue
type: number
originalFilename:
title: Originalfilename
type: string
polygons:
default: []
items:
$ref: '#/components/schemas/RegionPolygon'
title: Polygons
type: array
stdValue:
title: Stdvalue
type: number
uploadId:
format: uuid
title: Uploadid
type: string
width:
title: Width
type: integer
zscaleMax:
title: Zscalemax
type: number
zscaleMin:
title: Zscalemin
type: number
required:
- uploadId
- originalFilename
- imageData
- width
- height
- minValue
- maxValue
- meanValue
- stdValue
- zscaleMin
- zscaleMax
title: FITSImageDataResponse
type: object
ImageStatus:
enum:
- PENDING
- UPLOADED
- PROCESSING
- COMPLETED
- FAILED
title: ImageStatus
type: string
ValidationError:
properties:
ctx:
type: object
input: {}
loc:
items:
oneOf:
- type: string
- format: int64
type: integer
type: array
msg:
type: string
type:
type: string
required:
- loc
- msg
- type
type: object
UploadInitiateResponse:
properties:
fields:
anyOf:
- additionalProperties:
type: string
type: object
- type: 'null'
filename:
title: Filename
type: string
method:
title: Method
type: string
resultsUrl:
title: Resultsurl
type: string
uploadId:
format: uuid
title: Uploadid
type: string
uploadUrl:
title: Uploadurl
type: string
required:
- uploadId
- filename
- uploadUrl
- method
- resultsUrl
title: UploadInitiateResponse
type: object
RegionCircle:
description: Circle region overlay
properties:
color:
title: Color
type: string
label:
anyOf:
- type: string
- type: 'null'
radius:
title: Radius
type: number
x:
title: X
type: number
y:
title: Y
type: number
required:
- x
- y
- radius
- color
title: RegionCircle
type: object
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
type: object
securitySchemes:
HTTPBearer:
scheme: bearer
type: http