{"openapi": "3.1.0", "info": {"title": "SPHEREx Sky Changes API", "version": "1.0.0", "description": "Metadata-first integration contract. The current server is local, not a hosted public service. Observation searches retrieve metadata only. Images are fetched only by explicit bounded sequence POSTs. Footprint overlap is not a source detection or a same-band epoch guarantee."}, "servers": [{"url": "/", "description": "The current server origin; replace with an authorized hosted base URL when deployed"}], "paths": {"/api/v1/observations": {"get": {"summary": "Find overlapping observations without downloading pixels", "parameters": [{"name": "ra", "in": "query", "description": "ICRS right ascension in degrees", "required": true, "schema": {"type": "number", "minimum": 0, "exclusiveMaximum": 360}}, {"name": "dec", "in": "query", "description": "ICRS declination in degrees", "required": true, "schema": {"type": "number", "minimum": -90, "maximum": 90}}, {"name": "fov_arcmin", "in": "query", "description": "Circular field diameter; metadata only", "required": false, "schema": {"type": "number", "minimum": 1, "maximum": 60, "default": 5}}, {"name": "collections", "in": "query", "description": "Comma-separated spectral-image collections: spherex_dr1, spherex_qr3, spherex_dr1_deep, spherex_qr3_deep", "required": false, "schema": {"type": "string", "default": "spherex_dr1,spherex_qr3"}}, {"name": "detector", "in": "query", "description": "Detector array, not a single spectral channel", "required": false, "schema": {"type": "integer", "minimum": 1, "maximum": 6}}, {"name": "start_mjd", "in": "query", "description": "Inclusive interval-overlap lower bound", "required": false, "schema": {"type": "number"}}, {"name": "end_mjd", "in": "query", "description": "Inclusive interval-overlap upper bound", "required": false, "schema": {"type": "number"}}, {"name": "sort", "in": "query", "description": "Chronological order; ID breaks ties", "required": false, "schema": {"type": "string", "enum": ["asc", "desc"], "default": "asc"}}, {"name": "limit", "in": "query", "description": "Page size", "required": false, "schema": {"type": "integer", "minimum": 1, "maximum": 500, "default": 100}}, {"name": "cursor", "in": "query", "description": "Opaque next_cursor; filter-bound and revision-bound", "required": false, "schema": {"type": "string"}}, {"name": "mode", "in": "query", "description": "auto fetches missing metadata only; cache_only never contacts the archive", "required": false, "schema": {"type": "string", "enum": ["auto", "cache_only"], "default": "auto"}}, {"name": "refresh", "in": "query", "description": "Explicit archive metadata refresh; incompatible with cache_only", "required": false, "schema": {"type": "boolean", "default": false}}], "responses": {"200": {"description": "Success", "headers": {"Server-Timing": {"schema": {"type": "string"}}, "X-Request-ID": {"schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ObservationPage"}}}}, "400": {"description": "Invalid input", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Host/origin not enabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not indexed or not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Catalogue revision changed or sequence not cached", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Incorrect content type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "502": {"description": "Upstream service failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/observations/{id}": {"get": {"summary": "Read one indexed observation", "parameters": [{"name": "id", "in": "path", "required": true, "schema": {"type": "string", "pattern": "^[0-9a-f]{24}$"}}], "responses": {"200": {"description": "Success", "headers": {"Server-Timing": {"schema": {"type": "string"}}, "X-Request-ID": {"schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"type": "object", "properties": {"observation": {"$ref": "#/components/schemas/Observation"}, "request_id": {"type": "string"}}}}}}, "400": {"description": "Invalid input", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Host/origin not enabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not indexed or not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Catalogue revision changed or sequence not cached", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Incorrect content type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "502": {"description": "Upstream service failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/coverage": {"get": {"summary": "Inspect known region completeness; never contacts the archive", "parameters": [{"name": "ra", "in": "query", "description": "ICRS right ascension in degrees", "required": true, "schema": {"type": "number", "minimum": 0, "exclusiveMaximum": 360}}, {"name": "dec", "in": "query", "description": "ICRS declination in degrees", "required": true, "schema": {"type": "number", "minimum": -90, "maximum": 90}}, {"name": "fov_arcmin", "in": "query", "description": "Circular field diameter; metadata only", "required": false, "schema": {"type": "number", "minimum": 1, "maximum": 60, "default": 5}}, {"name": "collections", "in": "query", "description": "Comma-separated spectral-image collections: spherex_dr1, spherex_qr3, spherex_dr1_deep, spherex_qr3_deep", "required": false, "schema": {"type": "string", "default": "spherex_dr1,spherex_qr3"}}, {"name": "detector", "in": "query", "description": "Detector array, not a single spectral channel", "required": false, "schema": {"type": "integer", "minimum": 1, "maximum": 6}}, {"name": "start_mjd", "in": "query", "description": "Inclusive interval-overlap lower bound", "required": false, "schema": {"type": "number"}}, {"name": "end_mjd", "in": "query", "description": "Inclusive interval-overlap upper bound", "required": false, "schema": {"type": "number"}}, {"name": "sort", "in": "query", "description": "Chronological order; ID breaks ties", "required": false, "schema": {"type": "string", "enum": ["asc", "desc"], "default": "asc"}}, {"name": "limit", "in": "query", "description": "Page size", "required": false, "schema": {"type": "integer", "minimum": 1, "maximum": 500, "default": 100}}, {"name": "cursor", "in": "query", "description": "Opaque next_cursor; filter-bound and revision-bound", "required": false, "schema": {"type": "string"}}, {"name": "mode", "in": "query", "description": "auto fetches missing metadata only; cache_only never contacts the archive", "required": false, "schema": {"type": "string", "enum": ["auto", "cache_only"], "default": "auto"}}, {"name": "refresh", "in": "query", "description": "Explicit archive metadata refresh; incompatible with cache_only", "required": false, "schema": {"type": "boolean", "default": false}}], "responses": {"200": {"description": "Success", "headers": {"Server-Timing": {"schema": {"type": "string"}}, "X-Request-ID": {"schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"type": "object", "additionalProperties": true}}}}, "400": {"description": "Invalid input", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Host/origin not enabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not indexed or not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Catalogue revision changed or sequence not cached", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Incorrect content type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "502": {"description": "Upstream service failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/status": {"get": {"summary": "Local catalogue counts and bounded server latency telemetry", "parameters": [], "responses": {"200": {"description": "Success", "headers": {"Server-Timing": {"schema": {"type": "string"}}, "X-Request-ID": {"schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"type": "object", "additionalProperties": true}}}}, "400": {"description": "Invalid input", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Host/origin not enabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not indexed or not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Catalogue revision changed or sequence not cached", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Incorrect content type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "502": {"description": "Upstream service failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/options": {"get": {"summary": "Supported collections, detector arrays and viewer options", "parameters": [], "responses": {"200": {"description": "Success", "headers": {"Server-Timing": {"schema": {"type": "string"}}, "X-Request-ID": {"schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"type": "object", "additionalProperties": true}}}}, "400": {"description": "Invalid input", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Host/origin not enabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not indexed or not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Catalogue revision changed or sequence not cached", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Incorrect content type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "502": {"description": "Upstream service failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/targets": {"get": {"summary": "Challenge target coordinates with provenance and motion caveat", "parameters": [], "responses": {"200": {"description": "Success", "headers": {"Server-Timing": {"schema": {"type": "string"}}, "X-Request-ID": {"schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"type": "object", "additionalProperties": true}}}}, "400": {"description": "Invalid input", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Host/origin not enabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not indexed or not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Catalogue revision changed or sequence not cached", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Incorrect content type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "502": {"description": "Upstream service failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/overlays/{catalogue}": {"get": {"summary": "Query Gaia or AllWISE catalogue metadata", "parameters": [{"name": "ra", "in": "query", "description": "ICRS right ascension in degrees", "required": true, "schema": {"type": "number", "minimum": 0, "exclusiveMaximum": 360}}, {"name": "dec", "in": "query", "description": "ICRS declination in degrees", "required": true, "schema": {"type": "number", "minimum": -90, "maximum": 90}}, {"name": "fov_arcmin", "in": "query", "description": "Circular field diameter; metadata only", "required": false, "schema": {"type": "number", "minimum": 1, "maximum": 60, "default": 5}}, {"name": "catalogue", "in": "path", "required": true, "schema": {"type": "string", "enum": ["gaia", "wise"]}}, {"name": "mode", "in": "query", "description": "cache_only forbids archive calls", "required": false, "schema": {"type": "string", "enum": ["auto", "cache_only"], "default": "auto"}}], "responses": {"200": {"description": "Success", "headers": {"Server-Timing": {"schema": {"type": "string"}}, "X-Request-ID": {"schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"type": "object", "additionalProperties": true}}}}, "400": {"description": "Invalid input", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Host/origin not enabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not indexed or not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Catalogue revision changed or sequence not cached", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Incorrect content type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "502": {"description": "Upstream service failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/field-audit": {"get": {"summary": "Review all locally indexed overlapping records and cached preparation status", "parameters": [{"name": "ra", "in": "query", "description": "ICRS right ascension in degrees", "required": true, "schema": {"type": "number", "minimum": 0, "exclusiveMaximum": 360}}, {"name": "dec", "in": "query", "description": "ICRS declination in degrees", "required": true, "schema": {"type": "number", "minimum": -90, "maximum": 90}}, {"name": "fov_arcmin", "in": "query", "description": "Circular field diameter; metadata only", "required": false, "schema": {"type": "number", "minimum": 1, "maximum": 60, "default": 5}}], "responses": {"200": {"description": "Success", "headers": {"Server-Timing": {"schema": {"type": "string"}}, "X-Request-ID": {"schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"type": "object", "additionalProperties": true}}}}, "400": {"description": "Invalid input", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Host/origin not enabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not indexed or not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Catalogue revision changed or sequence not cached", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Incorrect content type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "502": {"description": "Upstream service failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/catalogue-sync": {"get": {"summary": "Read resumable all-sky metadata ingestion status", "parameters": [], "responses": {"200": {"description": "Success", "headers": {"Server-Timing": {"schema": {"type": "string"}}, "X-Request-ID": {"schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"type": "object", "additionalProperties": true}}}}, "400": {"description": "Invalid input", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Host/origin not enabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not indexed or not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Catalogue revision changed or sequence not cached", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Incorrect content type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "502": {"description": "Upstream service failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/field-downloads": {"post": {"summary": "Start or explicitly resume a durable field-scoped download of up to 500 indexed observations", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["ra", "dec", "fov_arcmin", "observation_ids"], "additionalProperties": false, "properties": {"ra": {"type": "number", "minimum": 0, "exclusiveMaximum": 360}, "dec": {"type": "number", "minimum": -90, "maximum": 90}, "fov_arcmin": {"type": "number", "minimum": 1, "maximum": 60}, "observation_ids": {"type": "array", "minItems": 1, "maxItems": 500, "items": {"type": "string"}}}}}}}, "responses": {"200": {"description": "Success", "headers": {"Server-Timing": {"schema": {"type": "string"}}, "X-Request-ID": {"schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"type": "object", "additionalProperties": true}}}}, "400": {"description": "Invalid input", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Host/origin not enabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not indexed or not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Catalogue revision changed or sequence not cached", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Incorrect content type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "502": {"description": "Upstream service failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/field-downloads/{id}": {"get": {"summary": "Read persistent per-observation outcomes; GET never resumes downloads", "parameters": [{"name": "id", "in": "path", "required": true, "schema": {"type": "string", "pattern": "^[0-9a-f]{24}$"}}], "responses": {"200": {"description": "Success", "headers": {"Server-Timing": {"schema": {"type": "string"}}, "X-Request-ID": {"schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"type": "object", "additionalProperties": true}}}}, "400": {"description": "Invalid input", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Host/origin not enabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not indexed or not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Catalogue revision changed or sequence not cached", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Incorrect content type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "502": {"description": "Upstream service failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/field-downloads/{id}/stop": {"post": {"summary": "Stop after the current cutout; completed observations remain available", "parameters": [{"name": "id", "in": "path", "required": true, "schema": {"type": "string", "pattern": "^[0-9a-f]{24}$"}}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "maxProperties": 0}}}}, "responses": {"200": {"description": "Success", "headers": {"Server-Timing": {"schema": {"type": "string"}}, "X-Request-ID": {"schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"type": "object", "additionalProperties": true}}}}, "400": {"description": "Invalid input", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Host/origin not enabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not indexed or not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Catalogue revision changed or sequence not cached", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Incorrect content type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "502": {"description": "Upstream service failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/assemblies": {"post": {"summary": "Combine existing prepared jobs into a common-stretch chronological sequence without archive downloads", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["job_ids"], "properties": {"job_ids": {"type": "array", "minItems": 1, "maxItems": 500, "items": {"type": "string"}}}, "additionalProperties": false}}}}, "responses": {"200": {"description": "Success", "headers": {"Server-Timing": {"schema": {"type": "string"}}, "X-Request-ID": {"schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"type": "object", "additionalProperties": true}}}}, "400": {"description": "Invalid input", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Host/origin not enabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not indexed or not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Catalogue revision changed or sequence not cached", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Incorrect content type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "502": {"description": "Upstream service failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/mosaics": {"post": {"summary": "Explicit exploratory spatial mosaic of selected same-detector/release image regions", "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SequenceRequest"}}}}, "responses": {"200": {"description": "Success", "headers": {"Server-Timing": {"schema": {"type": "string"}}, "X-Request-ID": {"schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SequenceAccepted"}}}}, "400": {"description": "Invalid input", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Host/origin not enabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not indexed or not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Catalogue revision changed or sequence not cached", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Incorrect content type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "502": {"description": "Upstream service failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/sequences": {"post": {"summary": "Explicitly request up to 24 selected image regions; no bulk download", "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SequenceRequest"}}}}, "responses": {"200": {"description": "Success", "headers": {"Server-Timing": {"schema": {"type": "string"}}, "X-Request-ID": {"schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SequenceAccepted"}}}}, "400": {"description": "Invalid input", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Host/origin not enabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not indexed or not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Catalogue revision changed or sequence not cached", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Incorrect content type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "502": {"description": "Upstream service failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "202": {"description": "Queued or running; poll the status link", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SequenceAccepted"}}}}}}}, "/api/v1/sequences/{id}": {"get": {"summary": "Read status/provenance; GET never starts or resumes image fetching", "parameters": [{"name": "id", "in": "path", "required": true, "schema": {"type": "string", "pattern": "^[0-9a-f]{24}$"}}], "responses": {"200": {"description": "Success", "headers": {"Server-Timing": {"schema": {"type": "string"}}, "X-Request-ID": {"schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"type": "object", "additionalProperties": true}}}}, "400": {"description": "Invalid input", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Host/origin not enabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not indexed or not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Catalogue revision changed or sequence not cached", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Incorrect content type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "502": {"description": "Upstream service failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/products/{id}/{name}": {"get": {"summary": "Read a locally prepared PNG, GIF, manifest or aligned array; ETag supported", "parameters": [{"name": "id", "in": "path", "required": true, "schema": {"type": "string", "pattern": "^[0-9a-f]{24}$"}}, {"name": "name", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Prepared artifact", "content": {"image/png": {"schema": {"type": "string", "format": "binary"}}, "image/gif": {"schema": {"type": "string", "format": "binary"}}, "application/json": {"schema": {"type": "string", "format": "binary"}}, "application/octet-stream": {"schema": {"type": "string", "format": "binary"}}}}, "304": {"description": "ETag unchanged"}, "400": {"description": "Invalid input", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Host/origin not enabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not indexed or not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Catalogue revision changed or sequence not cached", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Incorrect content type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "502": {"description": "Upstream service failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/cutouts/{id}": {"get": {"summary": "Download an existing cached native-region FITS; no remote image fetch", "parameters": [{"name": "id", "in": "path", "required": true, "schema": {"type": "string", "pattern": "^[0-9a-f]{24}$"}}], "responses": {"200": {"description": "Native science, flags, variance, zodi and wavelength metadata", "content": {"application/fits": {"schema": {"type": "string", "format": "binary"}}}}, "304": {"description": "ETag unchanged"}, "400": {"description": "Invalid input", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Host/origin not enabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not indexed or not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Catalogue revision changed or sequence not cached", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Incorrect content type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "502": {"description": "Upstream service failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}}, "components": {"schemas": {"Observation": {"type": "object", "required": ["id", "observation_id", "collection", "detector", "time_start_mjd", "time_end_mjd", "time_start_utc", "source_url", "footprint", "wavelength_semantics"], "properties": {"id": {"type": "string", "pattern": "^[0-9a-f]{24}$"}, "observation_id": {"type": "string"}, "collection": {"type": "string", "enum": ["spherex_dr1", "spherex_qr3", "spherex_dr1_deep", "spherex_qr3_deep"]}, "detector": {"type": "integer", "minimum": 1, "maximum": 6}, "time_start_mjd": {"type": "number"}, "time_end_mjd": {"type": "number"}, "time_start_utc": {"type": "string", "format": "date-time"}, "time_end_utc": {"type": "string", "format": "date-time"}, "source_url": {"type": "string", "format": "uri"}, "footprint": {"type": "string"}, "footprint_match": {"type": "string"}, "wavelength_bounds_um": {"type": "array", "items": {"type": "number"}, "minItems": 2, "maxItems": 2}, "wavelength_semantics": {"type": "string"}, "links": {"type": "object", "additionalProperties": true}}, "additionalProperties": true}, "ObservationPage": {"type": "object", "required": ["observations", "pagination", "coverage", "provenance", "request_id"], "properties": {"observations": {"type": "array", "items": {"$ref": "#/components/schemas/Observation"}}, "pagination": {"type": "object", "properties": {"returned": {"type": "integer"}, "total_indexed_matches": {"type": "integer"}, "next_cursor": {"type": ["string", "null"]}, "index_revision": {"type": "integer"}}}, "coverage": {"type": "object", "additionalProperties": true}, "provenance": {"type": "object", "additionalProperties": true}, "request_id": {"type": "string"}}, "additionalProperties": true}, "Error": {"type": "object", "required": ["error", "request_id"], "properties": {"error": {"type": "object", "required": ["code", "message"], "properties": {"code": {"type": "string"}, "message": {"type": "string"}}}, "request_id": {"type": "string"}}}, "SequenceRequest": {"type": "object", "required": ["ra", "dec", "observation_ids"], "additionalProperties": false, "properties": {"ra": {"type": "number", "minimum": 0, "exclusiveMaximum": 360}, "dec": {"type": "number", "minimum": -90, "maximum": 90}, "fov_arcmin": {"type": "number", "minimum": 1, "maximum": 60, "default": 5}, "observation_ids": {"type": "array", "items": {"type": "string", "pattern": "^[0-9a-f]{24}$"}, "minItems": 1, "maxItems": 24}, "match_wavelengths": {"type": "boolean", "default": true, "description": "Organize wavelength groups; every explicitly selected record is attempted rather than discarded"}, "cached_only": {"type": "boolean", "default": false, "description": "Return 409 rather than downloading any missing image regions"}}}, "SequenceAccepted": {"type": "object", "properties": {"job_id": {"type": "string"}, "state": {"type": "string"}, "links": {"type": "object", "additionalProperties": true}, "request_id": {"type": "string"}}}}}}