Citra Space Images API

The images API from Citra Space — 6 operation(s) for images.

Operations 8

GET /images/{upload_id}/data Get Fits Image Data #
GET /my/images List My Images #
POST /my/images Upload Initiate #
DELETE /my/images/{upload_id} Delete Image #
GET /my/images/{upload_id} Get Upload Status #
GET /satellites/{satellite_id}/images Get Satellite Image Statuses #
GET /tasks/{task_id}/images Get Task Image Statuses #
GET /telescopes/{telescope_id}/images Get Telescope Image Statuses #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/citra-space:citra-space-images-api"
All apis
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.

Get an API 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 Specification

citra-space-images-api-openapi.yml Raw ↑
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