openapi: 3.0.3 info: title: Mission Space Public API description: | Space weather data and atmospheric model API providing solar wind, geomagnetic indices, and models. > **⚠️ API Under Construction** > This API is currently in development. Endpoints and data formats are subject to change. Production availability coming soon. ## Data Overview - **Kp Index**: 3-hourly geomagnetic activity (0-9 scale) - **Magnetic Field**: Solar wind Bx/By/Bz from DSCOVR L1 - **Solar Wind**: Speed, density, temperature, pressure from DSCOVR L1 - **Proton Flux**: Energy channels >0.5-100 MeV from GOES - **X-Ray Flux**: GOES classification (A/B/C/M/X-class) - **Satellite Data**: POES high-latitude and GOES geostationary measurements - **Events**: Coronal mass ejections - **Models**: JB2008 and MSIS atmospheric density/temperature calculations ## Getting Started To use this API, you'll need an API key. [Request API access here](/request-access) to get started. ### Detailed Guides - [**POES Satellite Data Guide**](/poes) - Learn about POES satellite measurements (154+ types), active satellites (NOAA15/18/19, MetOp01/03), and 1B+ records - [**GOES Satellite Data Guide**](/goes) - Learn about GOES satellite measurements (167+ types), active satellites (GOES16/17/18/19), and 34M+ records ## Authentication All API endpoints (except `/health`) require authentication using an API key. You can authenticate in two ways: **Option 1: Header (Recommended)** ``` X-API-Key: your_api_key_here ``` **Option 2: Query Parameter** ``` ?api_key=your_api_key_here ``` ## Rate Limits Rate limit information is included in response headers: - `X-RateLimit-Limit`: Requests allowed per minute - `X-RateLimit-Remaining`: Remaining requests in current window **Limits:** - 200 req/min ## Common Parameters **Time Parameters:** - All data endpoints require ISO 8601 timestamps (e.g., "2025-01-01T00:00:00Z") - Maximum query span: 365 days per request - Times are always in UTC **Pagination:** - `limit`: 1-10000 records per page (default 1000) - `offset`: Skip N records (default 0) ## Field Units & Descriptions | Field | Unit | Typical Range | Source | |-------|------|---------------|--------| | Kp Index | 0-9 (half-steps) | 0-9 | USGS | | Bx, By, Bz | nanoTesla (nT) | ±100 | DSCOVR | | Solar Wind Speed | km/s | 250-600 | DSCOVR | | Density | particles/cm³ | 1-20 | DSCOVR | | Temperature | Kelvin | 10K-100K | DSCOVR | | Proton Flux | protons/(cm²·s·sr) | 0.1-1000 | GOES | | X-Ray Flux | W/m² | 1e-7 to 1e-2 | GOES | | Thermosphere Density | kg/m³ | 1e-15 to 1e-11 | Models | | Temperature | Kelvin | 500-2000 | Models | version: 1.0.0 servers: - url: https://api.mission.space/api/v1 description: Production API tags: - name: Data - Measurements description: Space weather measurement data - name: Data - Indices description: Geomagnetic and space weather indices - name: Data - Events description: Space weather events and phenomena - name: Models description: Atmospheric model calculations - name: Utility description: Utility endpoints security: - ApiKeyAuth: [] - ApiKeyQuery: [] paths: /health: get: summary: Health check tags: - Utility security: [] operationId: healthCheck responses: '200': description: API is healthy content: application/json: schema: type: object properties: status: type: string example: "ok" timestamp: type: string format: date-time '400': $ref: '#/components/responses/BadRequest' /kp-index: get: summary: Get Kp Index data description: | Retrieve 3-hourly geomagnetic Kp index (0-9 scale, half-integer steps). The Kp index measures Earth's magnetic field disturbances and is critical for space weather forecasting. Higher values indicate stronger geomagnetic activity (Kp≥5 = geomagnetic storm). **Data Source**: USGS World Data Center **Historical Coverage**: 1932-present **Update Latency**: 1-3 days **Update Time**: ~12:00 UTC daily tags: - Data - Indices security: - ApiKeyAuth: [] - ApiKeyQuery: [] operationId: getKpIndex parameters: - name: start_time in: query required: true description: Start time ISO 8601 format. Data available from 1932-01-01 onwards. All times UTC. allowReserved: true schema: type: string format: date-time example: "2025-01-01T00:00:00Z" example: "2025-01-01T00:00:00Z" - name: end_time in: query required: true description: End time ISO 8601 format. Must be after start_time. Maximum 365 day span per request. allowReserved: true schema: type: string format: date-time example: "2025-01-31T23:59:59Z" example: "2025-01-31T23:59:59Z" - name: limit in: query description: | Records per page. Recommend 1000 for month-long queries. Max 10000 per request. schema: type: integer minimum: 1 maximum: 10000 default: 1000 - name: offset in: query description: | Pagination offset - skip N records to get next page. When returned < limit, you've reached the end of available data. Use meta.next_page for next page URL. schema: type: integer minimum: 0 default: 0 responses: '200': description: Successful response headers: X-RateLimit-Limit: description: Requests allowed per minute schema: type: integer X-RateLimit-Remaining: description: Remaining requests in current window schema: type: integer X-RateLimit-Reset: description: Unix timestamp when rate limit resets schema: type: integer content: application/json: schema: type: object properties: status: type: string data: type: array items: $ref: '#/components/schemas/KpIndexData' meta: $ref: '#/components/schemas/PaginationMeta' examples: default: value: status: "success" data: - timestamp: "2025-01-01T00:00:00Z" kp_index: 2.3 ap_index: 9 source: "USGS" meta: total: 248 returned: 100 limit: 100 offset: 0 '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' /magnetic-field: get: summary: Get Magnetic Field data description: | Retrieve solar wind magnetic field components (Bx, By, Bz) and total magnitude in Geocentric Solar Magnetospheric (GSM) coordinates. The Bz south component is the primary driver of geomagnetic storms. **Data Source**: DSCOVR L1 spacecraft (Deep Space Climate Observatory) **Historical Coverage**: 2015-present **Update Latency**: 1-2 hours **Typical Values**: ±100 nanoTesla tags: - Data - Measurements security: - ApiKeyAuth: [] - ApiKeyQuery: [] operationId: getMagneticField parameters: - name: start_time in: query required: true description: Start time ISO 8601. Data from 2015-01-01 onwards. allowReserved: true schema: type: string format: date-time example: "2025-01-01T00:00:00Z" example: "2025-01-01T00:00:00Z" - name: end_time in: query required: true description: End time ISO 8601. Maximum 365 day span. allowReserved: true schema: type: string format: date-time example: "2025-01-01T01:00:00Z" example: "2025-01-01T01:00:00Z" - name: limit in: query description: "Records per page. 1-min data: limit=1440 for 1 day. Default 1000." schema: type: integer minimum: 1 maximum: 10000 default: 1000 - name: offset in: query description: Pagination offset. When returned < limit, no more data available. schema: type: integer minimum: 0 default: 0 responses: '200': description: Successful response content: application/json: schema: type: object properties: status: type: string data: type: array items: $ref: '#/components/schemas/MagneticFieldData' meta: $ref: '#/components/schemas/PaginationMeta' examples: default: value: status: "success" data: - timestamp: "2025-01-01T00:00:00Z" bx_nT: -2.45 by_nT: 3.12 bz_nT: -8.67 btotal_nT: 9.45 meta: total: 14400 returned: 100 limit: 1000 offset: 0 '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/TooManyRequests' /solar-wind: get: summary: Get Solar Wind data description: | Retrieve solar wind bulk parameters: speed, density, temperature, and dynamic pressure. These measurements are essential for magnetosphere modeling and geomagnetic storm forecasting. High speed + southward Bz = highest storm risk. **Data Source**: DSCOVR L1 spacecraft **Historical Coverage**: 2015-present **Update Latency**: 1-2 hours **Typical Values**: Speed 250-600 km/s, Density 1-20 particles/cm³, Temp 10K-100K K tags: - Data - Measurements security: - ApiKeyAuth: [] - ApiKeyQuery: [] operationId: getSolarWind parameters: - name: start_time in: query required: true description: Start time ISO 8601 format. allowReserved: true schema: type: string format: date-time example: "2025-01-01T00:00:00Z" example: "2025-01-01T00:00:00Z" - name: end_time in: query required: true description: End time ISO 8601 format. allowReserved: true schema: type: string format: date-time example: "2025-01-02T00:00:00Z" example: "2025-01-02T00:00:00Z" - name: limit in: query description: Records per page (default 1000, max 10000). schema: type: integer minimum: 1 maximum: 10000 default: 1000 - name: offset in: query description: Pagination offset. schema: type: integer minimum: 0 default: 0 responses: '200': description: Successful response content: application/json: schema: type: object properties: status: type: string data: type: array items: $ref: '#/components/schemas/SolarWindData' meta: $ref: '#/components/schemas/PaginationMeta' examples: default: value: status: "success" data: - timestamp: "2025-01-01T00:00:00Z" velocity_km_s: 412.5 density_cm3: 5.2 temperature_k: 85000 pressure_npa: -5.1 meta: total: 14400 returned: 100 limit: 1000 offset: 0 '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/TooManyRequests' /proton-flux: get: summary: Get Proton Flux description: | Retrieve integral proton flux at standard energy thresholds from GOES SGPS (Space Environment Monitor). Returns pre-computed integral fluxes for 7 energy thresholds in a single response, optimized for space weather operations. **Data Source**: GOES-16/17/18/19 SGPS Instrument **Historical Coverage**: 2016-present (GOES-R series) **Update Latency**: Near real-time **Energy Thresholds**: ≥10, ≥30, ≥50, ≥60, ≥100, ≥500, ≥1000 MeV **Units**: particles/cm²/s (integral flux) **Key Applications**: - Solar energetic particle (SEP) event detection - NOAA space weather alert generation (S-scale) - Spacecraft radiation risk assessment - Polar cap absorption forecasting **Energy Threshold Reference**: - ≥10 MeV: Baseline SEP monitoring, NOAA S1 threshold (10 pfu) - ≥30 MeV: HF communication impacts - ≥50 MeV: Moderate radiation hazard - ≥100 MeV: NOAA S3 threshold, significant radiation - ≥500 MeV: Deep penetration, high LET events - ≥1000 MeV: Ground Level Enhancement (GLE) indicator **Important Notes**: - **Record Multiplication**: The number of records returned is multiplied by the number of active satellites. For example, requesting 1 day of data without filtering by satellite will return records from all 4 active GOES satellites (GOES-16, GOES-17, GOES-18, GOES-19). - **Reverse Chronological Order**: Results are returned in reverse chronological order (newest first), which is opposite to the chronological order of the specified `start_time` and `end_time` parameters. tags: - Data - Measurements security: - ApiKeyAuth: [] - ApiKeyQuery: [] operationId: getProtonFlux parameters: - name: start_time in: query required: true description: Start time ISO 8601 format allowReserved: true schema: type: string format: date-time example: "2025-01-01T00:00:00Z" example: "2025-01-01T00:00:00Z" - name: end_time in: query required: true description: End time ISO 8601 format allowReserved: true schema: type: string format: date-time example: "2025-01-02T00:00:00Z" example: "2025-01-02T00:00:00Z" - name: satellite in: query description: Filter by GOES satellite (optional) schema: type: string enum: ["GOES16", "GOES17", "GOES18", "GOES19"] example: "GOES16" - name: limit in: query description: Records per page (default 1000, max 10000) schema: type: integer minimum: 1 maximum: 10000 default: 1000 - name: offset in: query description: Pagination offset schema: type: integer minimum: 0 default: 0 responses: '200': description: Successful response content: application/json: schema: type: object properties: status: type: string data: type: array items: $ref: '#/components/schemas/SGPSProtonFluxIntegral' meta: $ref: '#/components/schemas/PaginationMeta' examples: normal_conditions: summary: "Quiet conditions (no SEP event)" value: status: "success" data: - timestamp: "2025-01-01T12:00:00Z" satellite: "GOES16" flux_ge_10mev: 0.82 flux_ge_30mev: 0.15 flux_ge_50mev: 0.08 flux_ge_60mev: 0.06 flux_ge_100mev: 0.03 flux_ge_500mev: 0.01 flux_ge_1000mev: 0.005 energy_lower_bounds: [1.0, 6.5, 11.6, 30.6, 63.1] energy_upper_bounds: [6.5, 11.6, 30.6, 63.1, 165.0] energy_effective: [3.0, 8.7, 19.3, 43.5, 100.0] integral_energy_10mev: 11.0 integral_energy_30mev: 39.0 meta: total: 288 returned: 1 limit: 1000 offset: 0 sep_event: summary: "SEP event (S2 radiation storm)" value: status: "success" data: - timestamp: "2025-05-10T18:30:00Z" satellite: "GOES16" flux_ge_10mev: 185.0 flux_ge_30mev: 42.3 flux_ge_50mev: 18.5 flux_ge_60mev: 12.1 flux_ge_100mev: 5.8 flux_ge_500mev: 0.9 flux_ge_1000mev: 0.3 energy_lower_bounds: [1.0, 6.5, 11.6, 30.6, 63.1] energy_upper_bounds: [6.5, 11.6, 30.6, 63.1, 165.0] energy_effective: [3.0, 8.7, 19.3, 43.5, 100.0] integral_energy_10mev: 11.0 integral_energy_30mev: 39.0 meta: total: 576 returned: 1 limit: 1000 offset: 0 '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/TooManyRequests' /xray-flux: get: summary: Get X-Ray Flux description: | Retrieve solar X-ray flux from GOES XRSF (X-Ray Sensor Full-disk) instrument with automatic NOAA flare classification. Returns both XRSA (0.5-4 Å) and XRSB (1-8 Å) bands with real-time flare class assignment. **Data Source**: GOES-16/17/18/19 XRSF Instrument **Historical Coverage**: 2016-present (GOES-R series) **Update Latency**: Near real-time (1-minute cadence) **Wavelength Bands**: - XRSA: 0.5-4 Ångström (soft X-rays) - XRSB: 1-8 Ångström (primary for NOAA classification) **NOAA Solar Flare Classification** (based on XRSB flux): - **A-class**: < 10⁻⁷ W/m² (background, no flare) - **B-class**: 10⁻⁷ to 10⁻⁶ W/m² (minor flares, no impacts) - **C-class**: 10⁻⁶ to 10⁻⁵ W/m² (small flares, minor radio blackouts) - **M-class**: 10⁻⁵ to 10⁻⁴ W/m² (medium flares, HF radio blackouts, radiation storms) - **X-class**: ≥ 10⁻⁴ W/m² (major flares, widespread blackouts, radiation hazard) Each class has intensity levels 1.0-9.9 (e.g., M2.1, X1.5). The endpoint automatically computes these classifications and includes peak detection flags for flare identification. **Key Applications**: - Real-time solar flare monitoring - Space weather alert generation - HF communication impact assessment - Satellite operations planning **Important Notes**: - **Record Multiplication**: The number of records returned is multiplied by the number of active satellites. For example, requesting 1 day of data without filtering by satellite will return records from all 4 active GOES satellites (GOES-16, GOES-17, GOES-18, GOES-19). - **Reverse Chronological Order**: Results are returned in reverse chronological order (newest first), which is opposite to the chronological order of the specified `start_time` and `end_time` parameters. tags: - Data - Measurements security: - ApiKeyAuth: [] - ApiKeyQuery: [] operationId: getXrayFlux parameters: - name: start_time in: query required: true description: Start time ISO 8601 format allowReserved: true schema: type: string format: date-time example: "2025-01-01T00:00:00Z" example: "2025-01-01T00:00:00Z" - name: end_time in: query required: true description: End time ISO 8601 format allowReserved: true schema: type: string format: date-time example: "2025-01-02T00:00:00Z" example: "2025-01-02T00:00:00Z" - name: satellite in: query description: Filter by GOES satellite (optional) schema: type: string enum: ["GOES16", "GOES17", "GOES18", "GOES19"] example: "GOES16" - name: flare_category in: query description: Filter by major flare category (optional). Use to find only significant events. schema: type: string enum: ["A", "B", "C", "M", "X"] example: "M" - name: limit in: query description: Records per page (default 1000, max 10000) schema: type: integer minimum: 1 maximum: 10000 default: 1000 - name: offset in: query description: Pagination offset schema: type: integer minimum: 0 default: 0 responses: '200': description: Successful response content: application/json: schema: type: object properties: status: type: string data: type: array items: $ref: '#/components/schemas/XrayFluxData' meta: $ref: '#/components/schemas/PaginationMeta' examples: background: summary: "Background conditions (A-class)" value: status: "success" data: - timestamp: "2025-01-01T12:00:00Z" satellite: "GOES16" xrsa_flux: 2.3e-8 xrsb_flux: 1.2e-8 flare_class: "A1.2" flare_category: "A" flare_intensity: 1.2 is_peak_candidate: 0 meta: total: 1440 returned: 1 limit: 1000 offset: 0 m_class_flare: summary: "M-class flare event" value: status: "success" data: - timestamp: "2025-05-10T14:35:00Z" satellite: "GOES16" xrsa_flux: 3.8e-5 xrsb_flux: 2.1e-5 flare_class: "M2.1" flare_category: "M" flare_intensity: 2.1 is_peak_candidate: 1 meta: total: 180 returned: 1 limit: 1000 offset: 0 '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/TooManyRequests' /poes: get: summary: Get POES Satellite Data description: | Retrieve Polar Operational Environmental Satellites (POES) energetic particle and magnetometer data at high latitudes (~840 km polar orbit). Includes electron and proton fluxes across multiple energy channels, alpha particle fluxes, and magnetic field measurements in IGRF and Cartesian coordinates. **Data Source**: NOAA POES and MetOp satellites **Active Satellites**: NOAA-15, NOAA-18, NOAA-19, MetOp-01, MetOp-03 **Historical Coverage**: 1998-present **Update Interval**: 1-minute granularity; data typically available within 1-3 days after downlink **Coverage**: High-latitude regions (~840 km polar orbit) **Measurement Types**: - Position: latitude, longitude, altitude - Magnetometer: B-field in IGRF (foot of field line, satellite), Cartesian components - Particle Fluxes: Electrons (4 channels), Protons (8 channels), Alphas (4 channels) - Energy Arrays: Reference energy values for each flux channel **Use Cases**: Auroral substorm detection, radiation belt monitoring, space weather events **Important Notes**: - **Record Multiplication**: The number of records returned is multiplied by the number of active satellites. For example, requesting 1 day of data without filtering by satellite will return records from all 5 active POES satellites (NOAA-15, NOAA-18, NOAA-19, MetOp-01, MetOp-03). - **Reverse Chronological Order**: Results are returned in reverse chronological order (newest first), which is opposite to the chronological order of the specified `start_time` and `end_time` parameters. tags: - Data - Measurements security: - ApiKeyAuth: [] - ApiKeyQuery: [] operationId: getPOES parameters: - name: start_time in: query required: true description: Start time ISO 8601 format. allowReserved: true schema: type: string format: date-time example: "2025-01-01T00:00:00Z" example: "2025-01-01T00:00:00Z" - name: end_time in: query required: true description: End time ISO 8601 format. allowReserved: true schema: type: string format: date-time example: "2025-01-02T00:00:00Z" example: "2025-01-02T00:00:00Z" - name: satellite in: query description: | Filter by satellite (optional). Omit to return data from all available satellites. schema: type: string enum: ["NOAA15", "NOAA18", "NOAA19", "METOP01", "METOP03"] - name: limit in: query description: Records per page (default 1000, max 10000). schema: type: integer minimum: 1 maximum: 10000 default: 1000 - name: offset in: query description: Pagination offset. Use for retrieving additional pages. schema: type: integer minimum: 0 default: 0 responses: '200': description: Successful response headers: X-RateLimit-Limit: description: Requests allowed per minute schema: type: integer X-RateLimit-Remaining: description: Remaining requests in current window schema: type: integer content: application/json: schema: type: object properties: status: type: string data: type: array items: $ref: '#/components/schemas/POESData' meta: $ref: '#/components/schemas/PaginationMeta' examples: default: value: status: "success" data: - timestamp: "2025-01-01T00:00:00Z" satellite: "NOAA19" latitude: 45.3 longitude: 125.8 altitude_km: 830.0 btot_sat: 45230.5 bp_sat: 22100.3 br_sat: 19340.2 bt_sat: 18500.1 prot_flux_p5: 1250.5 elec_flux_e1: 3400.2 alpha_flux_a2: 125.1 prot_energy: [0.8, 2.2, 3.3, 5.5, 10.0, 30.0, 60.0, 100.0] elec_energy: [30.0, 100.0, 300.0, 800.0] meta: total: 18432 returned: 1 limit: 1000 offset: 0 '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/TooManyRequests' /goes/xrsf: get: summary: Get GOES X-Ray Sensor Flux (XRSF) Data description: | Retrieve X-Ray Sensor Flux measurements from GOES satellites. XRSF data includes X-ray flux measurements in the 0.1-0.8 nm (A) and 0.05-0.4 nm (B) bands used for solar flare classification. **Data Source**: NOAA GOES X-Ray Sensor (XRS) **Active Satellites**: GOES-16, GOES-17, GOES-18, GOES-19 **Historical Coverage**: GOES-16+ from 2016-present **Update Latency**: Real-time (minutes) **Key Measurements**: XRSA/XRSB flux (A/B bands), quality flags, roll angle **Use Cases**: Solar flare monitoring, X-ray event alerts, space weather forecasting **Important Notes**: - **Record Multiplication**: The number of records returned is multiplied by the number of active satellites. For example, requesting 1 day of data without filtering by satellite will return records from all 4 active GOES satellites (GOES-16, GOES-17, GOES-18, GOES-19). - **Reverse Chronological Order**: Results are returned in reverse chronological order (newest first), which is opposite to the chronological order of the specified `start_time` and `end_time` parameters. tags: - Data - Measurements security: - ApiKeyAuth: [] - ApiKeyQuery: [] operationId: getGOESXRSF parameters: - name: start_time in: query required: true description: Start time ISO 8601 format. allowReserved: true schema: type: string format: date-time example: "2025-01-01T00:00:00Z" example: "2025-01-01T00:00:00Z" - name: end_time in: query required: true description: End time ISO 8601 format. allowReserved: true schema: type: string format: date-time example: "2025-01-02T00:00:00Z" example: "2025-01-02T00:00:00Z" - name: satellite in: query description: | Filter by satellite (optional). Omit to return data from all available satellites. schema: type: string enum: ["GOES16", "GOES17", "GOES18", "GOES19"] - name: limit in: query description: Records per page (default 1000, max 10000). schema: type: integer minimum: 1 maximum: 10000 default: 1000 - name: offset in: query description: Pagination offset. Use for retrieving additional pages. schema: type: integer minimum: 0 default: 0 responses: '200': description: Successful response headers: X-RateLimit-Limit: description: Requests allowed per minute schema: type: integer X-RateLimit-Remaining: description: Remaining requests in current window schema: type: integer content: application/json: schema: type: object properties: status: type: string data: type: array items: $ref: '#/components/schemas/GOESXRSFData' meta: $ref: '#/components/schemas/PaginationMeta' examples: default: value: status: "success" data: - timestamp: "2025-01-15T10:30:00Z" satellite: "GOES18" xrsa_flux: 1.23e-5 xrsb_flux: 4.56e-6 xrsa_flag: 0 xrsb_flag: 0 roll_angle: 42.5 meta: total: 5000 returned: 100 limit: 1000 offset: 0 '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/TooManyRequests' /goes/euvs: get: summary: Get GOES Extreme Ultraviolet Sensor (EUVS) Data description: | Retrieve Extreme Ultraviolet Sensor (EUVS) measurements from GOES satellites. EUVS provides solar irradiance measurements at multiple EUV wavelengths and MgII core-to-wing ratio for monitoring solar extreme-ultraviolet output. **Data Source**: NOAA GOES EUVS **Active Satellites**: GOES-16, GOES-17, GOES-18, GOES-19 **Historical Coverage**: GOES-16+ from 2016-present **Update Latency**: Real-time **Key Measurements**: EUV irradiance at 7 wavelengths (256, 284, 304, 1175, 1216, 1335, 1405 Å), MgII index **Use Cases**: Solar UV activity tracking, ionosphere forecasting, radiation climate studies **Important Notes**: - **Record Multiplication**: The number of records returned is multiplied by the number of active satellites. For example, requesting 1 day of data without filtering by satellite will return records from all 4 active GOES satellites (GOES-16, GOES-17, GOES-18, GOES-19). - **Reverse Chronological Order**: Results are returned in reverse chronological order (newest first), which is opposite to the chronological order of the specified `start_time` and `end_time` parameters. tags: - Data - Measurements security: - ApiKeyAuth: [] - ApiKeyQuery: [] operationId: getGOESEUVS parameters: - name: start_time in: query required: true description: Start time ISO 8601 format. allowReserved: true schema: type: string format: date-time example: "2025-01-01T00:00:00Z" example: "2025-01-01T00:00:00Z" - name: end_time in: query required: true description: End time ISO 8601 format. allowReserved: true schema: type: string format: date-time example: "2025-01-02T00:00:00Z" example: "2025-01-02T00:00:00Z" - name: satellite in: query description: | Filter by satellite (optional). Omit to return data from all available satellites. schema: type: string enum: ["GOES16", "GOES17", "GOES18", "GOES19"] - name: limit in: query description: Records per page (default 1000, max 10000). schema: type: integer minimum: 1 maximum: 10000 default: 1000 - name: offset in: query description: Pagination offset. Use for retrieving additional pages. schema: type: integer minimum: 0 default: 0 responses: '200': description: Successful response headers: X-RateLimit-Limit: description: Requests allowed per minute schema: type: integer X-RateLimit-Remaining: description: Remaining requests in current window schema: type: integer content: application/json: schema: type: object properties: status: type: string data: type: array items: $ref: '#/components/schemas/GOESEUVSData' meta: $ref: '#/components/schemas/PaginationMeta' examples: default: value: status: "success" data: - timestamp: "2025-01-15T10:30:00Z" satellite: "GOES16" irr_1175: 3.45e-3 irr_1216: 5.67e-3 irr_256: 1.23e-1 irr_304: 7.89e-2 mgii_exis: 1.25 meta: total: 5000 returned: 100 limit: 1000 offset: 0 '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/TooManyRequests' /goes/magn: get: summary: Get GOES Magnetometer (MAGN) Data description: | Retrieve magnetometer data from GOES satellites in multiple coordinate systems (GSE, GSM, VDH, ECI). Includes satellite attitude and orbital information for understanding magnetic field vectors in space. **Data Source**: NOAA GOES Magnetometer (MAG) **Active Satellites**: GOES-16, GOES-17, GOES-18, GOES-19 **Historical Coverage**: GOES-16+ from 2016-present **Update Latency**: Real-time **Key Measurements**: Magnetic field in GSE/GSM/VDH/ECI coordinates, total field magnitude, attitude, orbit **Use Cases**: Magnetosphere research, geomagnetic storm monitoring, space weather modeling **Important Notes**: - **Record Multiplication**: The number of records returned is multiplied by the number of active satellites. For example, requesting 1 day of data without filtering by satellite will return records from all 4 active GOES satellites (GOES-16, GOES-17, GOES-18, GOES-19). - **Reverse Chronological Order**: Results are returned in reverse chronological order (newest first), which is opposite to the chronological order of the specified `start_time` and `end_time` parameters. tags: - Data - Measurements security: - ApiKeyAuth: [] - ApiKeyQuery: [] operationId: getGOESMAGN parameters: - name: start_time in: query required: true description: Start time ISO 8601 format. allowReserved: true schema: type: string format: date-time example: "2025-01-01T00:00:00Z" example: "2025-01-01T00:00:00Z" - name: end_time in: query required: true description: End time ISO 8601 format. allowReserved: true schema: type: string format: date-time example: "2025-01-02T00:00:00Z" example: "2025-01-02T00:00:00Z" - name: satellite in: query description: | Filter by satellite (optional). Omit to return data from all available satellites. schema: type: string enum: ["GOES16", "GOES17", "GOES18", "GOES19"] - name: limit in: query description: Records per page (default 1000, max 10000). schema: type: integer minimum: 1 maximum: 10000 default: 1000 - name: offset in: query description: Pagination offset. Use for retrieving additional pages. schema: type: integer minimum: 0 default: 0 responses: '200': description: Successful response headers: X-RateLimit-Limit: description: Requests allowed per minute schema: type: integer X-RateLimit-Remaining: description: Remaining requests in current window schema: type: integer content: application/json: schema: type: object properties: status: type: string data: type: array items: $ref: '#/components/schemas/GOESMAGNData' meta: $ref: '#/components/schemas/PaginationMeta' examples: default: value: status: "success" data: - timestamp: "2025-01-15T10:30:00Z" satellite: "GOES18" b_total: 15.8 b_gse: [10.5, -5.3, 8.2] b_gsm: [11.2, -4.1, 7.5] attitude_quat: [0.7071, 0.0, 0.0, 0.7071] meta: total: 5000 returned: 100 limit: 1000 offset: 0 '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/TooManyRequests' /goes/sgps: get: summary: Get GOES Space Weather Instruments (SGPS) Data description: | Retrieve Space Weather Instruments Package (SGPS) data from GOES satellites including solar and galactic proton flux measurements across multiple energy channels. Data includes both integral and differential proton fluxes. **Data Source**: NOAA GOES SGPS **Active Satellites**: GOES-16, GOES-17, GOES-18, GOES-19 **Historical Coverage**: GOES-16+ from 2016-present **Update Latency**: Real-time **Key Measurements**: Integral/differential proton fluxes, alpha particle fluxes, energy channels **Use Cases**: Radiation forecasting, proton event monitoring, SEP (Solar Energetic Particle) alerts **Important Notes**: - **Record Multiplication**: The number of records returned is multiplied by the number of active satellites. For example, requesting 1 day of data without filtering by satellite will return records from all 4 active GOES satellites (GOES-16, GOES-17, GOES-18, GOES-19). - **Reverse Chronological Order**: Results are returned in reverse chronological order (newest first), which is opposite to the chronological order of the specified `start_time` and `end_time` parameters. tags: - Data - Measurements security: - ApiKeyAuth: [] - ApiKeyQuery: [] operationId: getGOESSGPS parameters: - name: start_time in: query required: true description: Start time ISO 8601 format. allowReserved: true schema: type: string format: date-time example: "2025-01-01T00:00:00Z" example: "2025-01-01T00:00:00Z" - name: end_time in: query required: true description: End time ISO 8601 format. allowReserved: true schema: type: string format: date-time example: "2025-01-02T00:00:00Z" example: "2025-01-02T00:00:00Z" - name: satellite in: query description: | Filter by satellite (optional). Omit to return data from all available satellites. schema: type: string enum: ["GOES16", "GOES17", "GOES18", "GOES19"] - name: limit in: query description: Records per page (default 1000, max 10000). schema: type: integer minimum: 1 maximum: 10000 default: 1000 - name: offset in: query description: Pagination offset. Use for retrieving additional pages. schema: type: integer minimum: 0 default: 0 responses: '200': description: Successful response headers: X-RateLimit-Limit: description: Requests allowed per minute schema: type: integer X-RateLimit-Remaining: description: Remaining requests in current window schema: type: integer content: application/json: schema: type: object properties: status: type: string data: type: array items: $ref: '#/components/schemas/GOESSGPSData' meta: $ref: '#/components/schemas/PaginationMeta' examples: default: value: status: "success" data: - timestamp: "2025-01-15T10:30:00Z" satellite: "GOES18" avg_int_proton_flux: [1.23e3, 4.56e2] avg_diff_proton_flux: [[5.2e2, 3.1e2, 1.8e2]] diff_proton_effective_energy: [1.8, 6.5, 12.0] meta: total: 5000 returned: 100 limit: 1000 offset: 0 '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/TooManyRequests' /events/soho-lasco-cme: get: summary: Get SOHO/LASCO CME events description: Retrieve coronal mass ejection events from the SOHO/LASCO catalog. tags: - Data - Events security: - ApiKeyAuth: [] - ApiKeyQuery: [] operationId: getSOHOLASCOCMEEvents parameters: - name: start_time in: query required: true description: Start time ISO 8601 format allowReserved: true schema: type: string format: date-time example: "2025-01-01T00:00:00Z" example: "2025-01-01T00:00:00Z" - name: end_time in: query required: true description: End time ISO 8601 format allowReserved: true schema: type: string format: date-time example: "2025-01-02T00:00:00Z" example: "2025-01-02T00:00:00Z" - name: limit in: query schema: type: integer minimum: 1 maximum: 1000 default: 100 responses: '200': description: Successful response content: application/json: schema: type: object properties: status: type: string data: type: array items: $ref: '#/components/schemas/CMEEvent' meta: $ref: '#/components/schemas/PaginationMeta' examples: default: value: status: "success" data: - time_unix: "2025-01-01T00:00:00Z" central_position_angle_deg: 120 measurement_position_angle_deg: 100 speed_km_s: 820 angular_width_deg: 240 mass_kg: 8.2e12 is_halo: true remarks: "Full halo CME" meta: total: 200 returned: 100 limit: 100 offset: 0 '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/TooManyRequests' /models/jb2008: post: summary: Calculate density with JB2008 model description: Predict atmospheric density at specified location and time using JB2008 atmospheric model tags: - Models security: - ApiKeyAuth: [] - ApiKeyQuery: [] operationId: calculateJB2008 requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/JB2008Request' example: timestamp: "2025-01-01T12:00:00Z" latitude: 45.0 longitude: 15.0 altitude_km: 500 responses: '200': description: Successful calculation content: application/json: schema: type: object properties: status: type: string data: $ref: '#/components/schemas/JB2008Result' examples: default: value: status: "success" data: timestamp: "2025-01-01T12:00:00Z" latitude: 45.0 longitude: 15.0 altitude_km: 500 density_kg_m3: 1.2e-11 temperature_K: 1050 '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' /models/msis: post: summary: Calculate atmosphere with NRLMSIS model description: Predict temperature and density profiles using NRLMSIS 2.0 model tags: - Models security: - ApiKeyAuth: [] - ApiKeyQuery: [] operationId: calculateMSIS requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MSISRequest' example: timestamp: "2025-01-01T12:00:00Z" latitude: 45.0 longitude: 15.0 altitude_km: 100 f107: 150 ap: 25 responses: '200': description: Successful calculation content: application/json: schema: type: object properties: status: type: string data: $ref: '#/components/schemas/MSISResult' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' components: securitySchemes: ApiKeyAuth: type: apiKey in: header name: X-API-Key description: Provide your API key in the X-API-Key header. ApiKeyQuery: type: apiKey in: query name: api_key description: Provide your API key as a query parameter. schemas: TimeSeriesResponse: type: object properties: status: type: string enum: [success, error] data: type: array items: type: object additionalProperties: true meta: $ref: '#/components/schemas/PaginationMeta' PaginationMeta: type: object properties: total: type: integer description: Total records available returned: type: integer description: Number of records returned in this response limit: type: integer description: Limit used in this request offset: type: integer description: Offset used in this request KpIndexData: type: object properties: timestamp: type: string format: date-time kp_index: type: number ap_index: type: number source: type: string MagneticFieldData: type: object properties: timestamp: type: string format: date-time bx_nT: type: number nullable: true by_nT: type: number nullable: true bz_nT: type: number nullable: true btotal_nT: type: number nullable: true SolarWindData: type: object properties: timestamp: type: string format: date-time density_cm3: type: number nullable: true velocity_km_s: type: number nullable: true temperature_k: type: number nullable: true pressure_npa: type: number nullable: true bx_nT: type: number nullable: true by_nT: type: number nullable: true bz_nT: type: number nullable: true b_magnitude_nT: type: number nullable: true ProtonFluxData: type: object deprecated: true description: "[Deprecated] Old proton flux format. Use SGPSProtonFluxIntegral instead." properties: timestamp: type: string format: date-time energy_channel: type: string flux_pfu: type: number flux_error: type: number satellite: type: string instrument: type: string SGPSProtonFluxIntegral: type: object description: | GOES SGPS integral proton flux at standard energy thresholds. Pre-computed from differential flux channels for fast operational queries. properties: timestamp: type: string format: date-time description: Measurement time in UTC satellite: type: string description: GOES satellite identifier enum: ["GOES16", "GOES17", "GOES18", "GOES19"] flux_ge_10mev: type: number format: float description: Integral proton flux ≥10 MeV (particles/cm²/s). Direct from telemetry. Baseline for SEP monitoring. example: 0.82 flux_ge_30mev: type: number format: float description: Integral proton flux ≥30 MeV (particles/cm²/s). Direct from telemetry. HF radio absorption threshold. example: 0.15 flux_ge_50mev: type: number format: float description: Integral proton flux ≥50 MeV (particles/cm²/s). Computed from differential channels. example: 0.08 flux_ge_60mev: type: number format: float description: Integral proton flux ≥60 MeV (particles/cm²/s). Computed from differential channels. example: 0.06 flux_ge_100mev: type: number format: float description: Integral proton flux ≥100 MeV (particles/cm²/s). Computed from differential channels. NOAA S3 threshold. example: 0.03 flux_ge_500mev: type: number format: float description: Integral proton flux ≥500 MeV (particles/cm²/s). Computed from differential channels. Deep penetration events. example: 0.01 flux_ge_1000mev: type: number format: float description: Integral proton flux ≥1000 MeV (particles/cm²/s). Computed from differential channels. Ground Level Enhancement indicator. example: 0.005 energy_lower_bounds: type: array items: type: number format: float description: Lower energy bounds for differential channels (MeV) example: [1.0, 6.5, 11.6, 30.6, 63.1] energy_upper_bounds: type: array items: type: number format: float description: Upper energy bounds for differential channels (MeV) example: [6.5, 11.6, 30.6, 63.1, 165.0] energy_effective: type: array items: type: number format: float description: Effective energies for differential channels (MeV) example: [3.0, 8.7, 19.3, 43.5, 100.0] integral_energy_10mev: type: number format: float description: Effective energy for ≥10 MeV integral channel (MeV) example: 11.0 integral_energy_30mev: type: number format: float description: Effective energy for ≥30 MeV integral channel (MeV) example: 39.0 diff_proton_flux: type: array items: type: number format: float description: Differential proton flux from primary detector (particles/cm²/s/MeV) example: [5.2e2, 3.1e2, 1.8e2, 0.9e2, 0.3e2] integral_flux_original: type: array items: type: number format: float description: Original integral flux values from primary detector integral_flux_observed: type: array items: type: number format: float description: Observed integral flux values from primary sensor example: [1.23e3, 4.56e2] required: - timestamp - satellite XrayFluxData: type: object description: | GOES X-ray flux data with automatic NOAA flare classification. Materialized view provides both wavelength bands and real-time classification. properties: timestamp: type: string format: date-time description: Measurement time in UTC satellite: type: string description: GOES satellite identifier enum: ["GOES16", "GOES17", "GOES18", "GOES19"] xrsa_flux: type: number format: float description: X-ray flux in XRSA band (0.5-4 Ångström) in W/m² example: 2.3e-8 xrsb_flux: type: number format: float description: X-ray flux in XRSB band (1-8 Ångström) in W/m². Used for NOAA classification. example: 1.2e-8 flare_class: type: string description: Full NOAA flare classification with intensity (e.g., A1.2, B5.6, C3.4, M2.1, X1.5) example: "M2.1" flare_category: type: string description: Major flare category enum: ["A", "B", "C", "M", "X"] example: "M" flare_intensity: type: number format: float description: Intensity multiplier within the category (1.0-9.9) example: 2.1 is_peak_candidate: type: integer description: Flag indicating potential flare peak (1) or normal flux (0) enum: [0, 1] example: 1 required: - timestamp - satellite - flare_class - flare_category POESData: type: object description: POES/MetOp satellite particle and magnetometer data from high polar orbit (~840 km) properties: timestamp: type: string format: date-time description: Measurement time in UTC satellite: type: string description: POES satellite identifier enum: ["NOAA15", "NOAA18", "NOAA19", "METOP01", "METOP03"] latitude: type: number format: float description: Satellite latitude in degrees (-90 to 90) longitude: type: number format: float description: Satellite longitude in degrees (-180 to 180) altitude_km: type: number format: float description: Satellite altitude in kilometers bp_foot: type: number format: float description: B-field parallel component at foot of field line (nanoTesla) br_foot: type: number format: float description: B-field radial component at foot of field line (nanoTesla) bt_foot: type: number format: float description: B-field theta component at foot of field line (nanoTesla) btot_foot: type: number format: float description: Total B-field magnitude at foot of field line (nanoTesla) bp_sat: type: number format: float description: B-field parallel component at satellite (nanoTesla) br_sat: type: number format: float description: B-field radial component at satellite (nanoTesla) bt_sat: type: number format: float description: B-field theta component at satellite (nanoTesla) btot_sat: type: number format: float description: Total B-field magnitude at satellite (nanoTesla) bx_sat: type: number format: float description: B-field X component in satellite coordinates (nanoTesla) by_sat: type: number format: float description: B-field Y component in satellite coordinates (nanoTesla) bz_sat: type: number format: float description: B-field Z component in satellite coordinates (nanoTesla) elec_flux_e0: type: number format: float description: Electron flux in E0 energy channel (particles/cm²/s/sr) elec_flux_e1: type: number format: float description: Electron flux in E1 energy channel (particles/cm²/s/sr) elec_flux_e2: type: number format: float description: Electron flux in E2 energy channel (particles/cm²/s/sr) elec_flux_e3: type: number format: float description: Electron flux in E3 energy channel (particles/cm²/s/sr) prot_flux_p1: type: number format: float description: Proton flux in P1 energy channel (particles/cm²/s/sr) prot_flux_p2: type: number format: float description: Proton flux in P2 energy channel (particles/cm²/s/sr) prot_flux_p3: type: number format: float description: Proton flux in P3 energy channel (particles/cm²/s/sr) prot_flux_p4: type: number format: float description: Proton flux in P4 energy channel (particles/cm²/s/sr) prot_flux_p5: type: number format: float description: Proton flux in P5 energy channel (particles/cm²/s/sr) prot_flux_p6: type: number format: float description: Proton flux in P6 energy channel (particles/cm²/s/sr) prot_flux_p7: type: number format: float description: Proton flux in P7 energy channel (particles/cm²/s/sr) prot_flux_p8: type: number format: float description: Proton flux in P8 energy channel (particles/cm²/s/sr) alpha_flux_a1: type: number format: float description: Alpha particle flux in A1 energy channel (particles/cm²/s/sr) alpha_flux_a2: type: number format: float description: Alpha particle flux in A2 energy channel (particles/cm²/s/sr) alpha_flux_a3: type: number format: float description: Alpha particle flux in A3 energy channel (particles/cm²/s/sr) alpha_flux_a4: type: number format: float description: Alpha particle flux in A4 energy channel (particles/cm²/s/sr) elec_energy: type: array items: type: number format: float description: Reference energy values for electron flux channels (keV) prot_energy: type: array items: type: number format: float description: Reference energy values for proton flux channels (MeV) alpha_energy: type: array items: type: number format: float description: Reference energy values for alpha particle flux channels (MeV) GOESXRSFData: type: object description: X-Ray Sensor Flux measurement from GOES satellite properties: timestamp: type: string format: date-time description: Measurement time in UTC satellite: type: string description: GOES satellite identifier (GOES16, GOES17, GOES18, GOES19) enum: ["GOES16", "GOES17", "GOES18", "GOES19"] xrsa_flux: type: number format: float description: X-ray flux in XRSA band (0.1-0.8 nm) in W/m² xrsb_flux: type: number format: float description: X-ray flux in XRSB band (0.05-0.4 nm) in W/m² xrsa_flux_observed: type: number format: float description: Observed XRSA flux xrsb_flux_observed: type: number format: float description: Observed XRSB flux xrsa_flux_electrons: type: number format: float description: XRSA electron-caused contribution xrsb_flux_electrons: type: number format: float description: XRSB electron-caused contribution xrsa_flag: type: number format: float description: Quality flag for XRSA (0=good) xrsb_flag: type: number format: float description: Quality flag for XRSB (0=good) yaw_flip_flag: type: number format: float description: Yaw flip flag (0=normal) roll_angle: type: number format: float description: Satellite roll angle in degrees xrsa1_flux: type: number format: float description: XRSA component 1 flux xrsa2_flux: type: number format: float description: XRSA component 2 flux xrsb1_flux: type: number format: float description: XRSB component 1 flux xrsb2_flux: type: number format: float description: XRSB component 2 flux GOESEUVSData: type: object description: Extreme Ultraviolet Sensor measurement from GOES satellite properties: timestamp: type: string format: date-time description: Measurement time in UTC satellite: type: string description: GOES satellite identifier enum: ["GOES16", "GOES17", "GOES18", "GOES19"] irr_1175: type: number format: float description: EUV irradiance at 1175 Å in W/m² irr_1216: type: number format: float description: EUV irradiance at 1216 Å in W/m² irr_1335: type: number format: float description: EUV irradiance at 1335 Å in W/m² irr_1405: type: number format: float description: EUV irradiance at 1405 Å in W/m² irr_256: type: number format: float description: EUV irradiance at 256 Å in W/m² irr_284: type: number format: float description: EUV irradiance at 284 Å in W/m² irr_304: type: number format: float description: EUV irradiance at 304 Å in W/m² mgii_exis: type: number format: float description: MgII core-to-wing ratio (EXIS standard) mgii_standard: type: number format: float description: MgII core-to-wing ratio (standard definition) GOESMAGNData: type: object description: Magnetometer measurement from GOES satellite in multiple coordinate systems properties: timestamp: type: string format: date-time description: Measurement time in UTC satellite: type: string description: GOES satellite identifier enum: ["GOES16", "GOES17", "GOES18", "GOES19"] b_total: type: number format: float description: Total magnetic field magnitude in nanoTesla (nT) b_gse: type: array items: type: number format: float description: Magnetic field vector [Bx, By, Bz] in GSE coordinates (nT) b_gsm: type: array items: type: number format: float description: Magnetic field vector [Bx, By, Bz] in GSM coordinates (nT) b_vdh: type: array items: type: number format: float description: Magnetic field vector [Bx, By, Bz] in VDH coordinates (nT) b_eci: type: array items: type: number format: float description: Magnetic field vector [Bx, By, Bz] in ECI coordinates (nT) attitude_quat: type: array items: type: number format: float description: Satellite attitude as quaternion [q0, q1, q2, q3] orbit_llr_geo: type: array items: type: number format: float description: Orbital position [latitude, longitude, radius_km] in geographic coordinates GOESSGPSData: type: object description: Space Weather Instruments (SGPS) particle flux data from GOES satellite properties: timestamp: type: string format: date-time description: Measurement time in UTC satellite: type: string description: GOES satellite identifier enum: ["GOES16", "GOES17", "GOES18", "GOES19"] avg_int_proton_flux: type: array items: type: number format: float description: Integral proton flux above energy thresholds in protons/(cm²·s) avg_int_proton_flux_observed: type: array items: type: number format: float description: Observed integral proton flux avg_diff_proton_flux: type: array items: type: array items: type: number format: float description: Differential proton flux by channel in protons/(cm²·s·MeV) avg_diff_proton_flux_observed: type: array items: type: array items: type: number format: float description: Observed differential proton flux avg_diff_alpha_flux: type: array items: type: array items: type: number format: float description: Differential alpha particle flux by channel diff_proton_lower_energy: type: array items: type: number format: float description: Lower energy bounds for differential proton channels in MeV diff_proton_upper_energy: type: array items: type: number format: float description: Upper energy bounds for differential proton channels in MeV diff_proton_effective_energy: type: array items: type: number format: float description: Effective energy for differential proton channels in MeV integral_proton_effective_energy: type: array items: type: number format: float description: Effective energy for integral proton channels in MeV diff_alpha_lower_energy: type: array items: type: number format: float description: Lower energy bounds for differential alpha channels in MeV diff_alpha_upper_energy: type: array items: type: number format: float description: Upper energy bounds for differential alpha channels in MeV diff_alpha_effective_energy: type: array items: type: number format: float description: Effective energy for differential alpha channels in MeV ThermosphereData: type: object properties: timestamp: type: string format: date-time latitude: type: number longitude: type: number altitude_km: type: number temperature_k: type: number density_kg_m3: type: number altitude_range: type: string source: type: string StormEvent: type: object properties: id: type: string start_time: type: string format: date-time end_time: type: string format: date-time min_kp_index: type: number minimum: 0 maximum: 9 dst_min: type: number description: Minimum Dst index (nT) duration_hours: type: number SolarFlareEvent: type: object properties: id: type: string time_unix: type: string format: date-time source: type: string classification: type: string enum: ["A", "B", "C", "M", "X"] wavelength_angstrom: type: number duration_minutes: type: integer location_hemisphere: type: string description: Location hemisphere (e.g., N or S / E or W) CMEEvent: type: object properties: time_unix: type: string format: date-time central_position_angle_deg: type: number measurement_position_angle_deg: type: number speed_km_s: type: number angular_width_deg: type: number mass_kg: type: number is_halo: type: boolean remarks: type: string JB2008Request: type: object required: - timestamp - latitude - longitude - altitude_km properties: timestamp: type: string format: date-time description: Date and time in ISO 8601 format latitude: type: number minimum: -90 maximum: 90 description: Geographic latitude (-90 to 90 degrees) longitude: type: number minimum: -180 maximum: 180 description: Geographic longitude (-180 to 180 degrees) altitude_km: type: number minimum: 90 maximum: 1500 description: Altitude above sea level (90 to 1500 km) f107: type: number description: Solar flux F10.7 (optional, uses current value if not specified) ap: type: number description: Ap geomagnetic index (optional, uses current value if not specified) JB2008Result: type: object properties: timestamp: type: string format: date-time latitude: type: number longitude: type: number altitude_km: type: number density_kg_m3: type: number format: double temperature_K: type: number f107_used: type: number ap_used: type: number MSISRequest: type: object required: - timestamp - latitude - longitude - altitude_km properties: timestamp: type: string format: date-time description: Date and time in ISO 8601 format latitude: type: number minimum: -90 maximum: 90 description: Geographic latitude (-90 to 90 degrees) longitude: type: number minimum: -180 maximum: 180 description: Geographic longitude (-180 to 180 degrees) altitude_km: type: number minimum: 0 maximum: 1000 description: Altitude above sea level (0 to 1000 km) f107: type: number description: "Solar flux F10.7 (optional, currently accepted but not used)" ap: type: number description: "Ap geomagnetic index (optional, currently accepted but not used)" MSISResult: type: object properties: timestamp: type: string format: date-time latitude: type: number longitude: type: number altitude_km: type: number temperature_K: type: number density_kg_m3: type: number density_anomalous_kg_m3: type: number n2_density: type: number o2_density: type: number o_density: type: number ErrorResponse: type: object properties: status: type: string enum: [error] error: type: object properties: code: type: string message: type: string details: type: string nullable: true responses: BadRequest: description: Invalid request parameters content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: default: value: status: error error: code: "INVALID_REQUEST" message: "Invalid time range" details: "end_time must be after start_time" Unauthorized: description: Missing or invalid API key content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: default: value: status: error error: code: "UNAUTHORIZED" message: "Invalid or missing API key" TooManyRequests: description: Rate limit exceeded headers: X-RateLimit-Limit: schema: type: integer X-RateLimit-Remaining: schema: type: integer X-RateLimit-Reset: schema: type: integer content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: default: value: status: error error: code: "RATE_LIMIT_EXCEEDED" message: "Too many requests" details: "Rate limit resets in 45 seconds" InternalServerError: description: Server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: default: value: status: error error: code: "INTERNAL_ERROR" message: "An error occurred processing your request"