openapi: 3.0.1 info: title: AuroraX Application.wadl Utils API description: "## Overview\n\nThis webpage is an interactive documentation interface for the AuroraX RESTful API. This API\nis used by several applications including the AuroraX Conjunction Search, Event Explorer,\nKeogramist, PyAuroraX, and IDL-AuroraX. You can view these applications and libraries at\nhttps://aurorax.space and\nhttps://github.com/aurorax-space.\n\nDetailed documentation about the AuroraX platform and examples of using this API can be found at\nhttps://docs.aurorax.space.\n\nBelow, we outline the major categories of endpoints available for use:\n\n| Interface | Description |\n| ---------------- | --------------------------------------------------------------------------- |\n| Accounts | Operations relating to user accounts, API keys, and saved user data |\n| Authentication | Authentication using an email address and password, or an API key |\n| Availability | Retrieve information describing what data is in the database |\n| Data Sources | Interact with data sources |\n| Conjunctions | Search for conjunctions between multiple sets of data sources |\n| Ephemeris | Search and manage ephemeris data associated with a data source |\n| Data Products | Search and manage data products data associated with a data source |\n| Utils | Utilities, such as describing a search query in an SQL-like format |\n\n## Authentication\n\nAuroraX allows for two methods of authentication:\n\n1. Authenticate via username and password using the /authenticate endpoint to obtain an access\n token. Access tokens need to be sent on every request for secure resources. Inactive access tokens\n timeout after 30 minutes.\n\n2. Authenticate using an API key sent in the request header (key called 'x-aurorax-api-key')\n\nMore information can be found\nhere.\n\n## Errors\n\nThis API uses standard HTTP status codes to indicate the success or failure of the\nAPI call. When an error occurs, the body of the response will be JSON and contain an error code\nand message. All errors will respond with this format:\n```\n{\n \"error_code\": \"DUPLICATE\",\n \"error_message\": \"There was a duplicate record found. No changes were made.\"\n}\n```\n" version: stable servers: - url: https://api.aurorax.space description: AuroraX production server variables: {} - url: https://api.staging.aurorax.space description: AuroraX staging server variables: {} - url: http://localhost:8080/ description: Local Development and Debugging variables: {} tags: - name: Utils description: Various utilities paths: /api/v1/utils/timezones/convert: get: tags: - Utils summary: Given a timestamp in ISO format and a timezone, return the UTC equivelant description: This is the same operation for Citizen Science timestamps that are provided, but allows for preview of the calculated value operationId: calcUtc parameters: - name: ts in: query description: The timestamp schema: type: string format: date-time - name: tz in: query description: The timezone ts is in schema: type: string responses: '200': description: Timestamp in UTC content: application/json: schema: type: array items: type: string /api/v1/utils/describe/cartesian_products: post: tags: - Utils summary: Returns a count of cartesian products (tuples of data sources) of the given conjunction search object. This number is the combinations simple conjunction tuples between each data source found through the criteria block operationId: cartesianProduct requestBody: content: application/json: schema: $ref: '#/components/schemas/SuperConjunctionQuery' required: true responses: '200': description: The count of cartesian products found content: application/json: {} /api/v1/utils/admin/search_requests/{request_id}: delete: tags: - Utils summary: Delete a search request description: "Removes this search request and all associated data. \n\n*Must be authenticated*" operationId: deleteSearchRequest parameters: - name: request_id in: path description: The search request ID required: true schema: type: string responses: '200': description: The search request was delete '400': description: Invalid request. Please consult the documentation and retry. content: application/json: schema: $ref: '#/components/schemas/ErrorDocument' '401': description: 'Not Authorized Must be authenticated as an Administrator to remove a search request.' content: application/json: schema: $ref: '#/components/schemas/ErrorDocument' '403': description: 'Not Permitted Only an Administrator may list active searches.' content: application/json: schema: $ref: '#/components/schemas/ErrorDocument' security: - ApiKeyAuth: [] - AccessToken: [] /api/v1/utils/admin/search_requests: get: tags: - Utils summary: List search summaries description: "List searches, optionally filtering by: active, type (ephemeris, data_product, conjunction), between start/end, file_size >=, result_count >=, query_duration >=, has error_condition \n\n*Must be authenticated*" operationId: findSearchRequests parameters: - name: active in: query description: 'Filter by active. True: active only, false: completed only, omit: both' schema: type: boolean - name: search_type in: query description: 'Filter by Search Type. Omit: all' schema: type: string enum: - conjunction - ephemeris - data_product - name: start in: query description: Filter by start. Later than or equal if provided or omit for all before end schema: type: string format: date-time - name: end in: query description: Filter by end. Earlier than or equal if provided or omit for all before start schema: type: string format: date-time - name: file_size in: query description: Filter by file size. Greater than or equal if provided or omit for all file sizes (kilobytes). Overrides active to be false. schema: type: integer format: int64 - name: result_count in: query description: Filter by result count. Greater than or equal if provided or omit for all result counts. Overrides active to be false. schema: type: integer format: int32 - name: query_duration in: query description: Filter by query duration (millis). Greater than or equal if provided or omit for any duration schema: type: integer format: int64 - name: error_condition in: query description: 'Filter by queries with an error condition. Ignored if filtering for active queries. True: must have error, false: must not have error, omit: both' schema: type: boolean responses: '200': description: List of search summaries. content: application/json: schema: type: array items: $ref: '#/components/schemas/SearchRequestListing' '400': description: Invalid request. Please consult the documentation and retry. content: application/json: schema: $ref: '#/components/schemas/ErrorDocument' '401': description: 'Not Authorized Must be authenticated as an Administrator to list search requests.' content: application/json: schema: $ref: '#/components/schemas/ErrorDocument' '403': description: 'Not Permitted Only an Administrator may list search requests.' content: application/json: schema: $ref: '#/components/schemas/ErrorDocument' security: - ApiKeyAuth: [] - AccessToken: [] /api/v1/utils/timezones: get: tags: - Utils summary: List available time zones description: List available time zones. These should be standard from the TZ Database. In javascript, it is possible to use Intl.supportedValuesOf('timeZone') for valid values. operationId: listTimeZones responses: '200': description: List of time zones. content: application/json: schema: type: array items: type: string /api/v1/utils/describe/query/conjunction: post: tags: - Utils summary: Parses the query into an 'SQL like' query expression operationId: parse requestBody: content: application/json: schema: $ref: '#/components/schemas/SuperConjunctionQuery' required: true responses: '200': description: The parsed query content: application/json: schema: type: array items: type: string /api/v1/utils/describe/query/data_products: post: tags: - Utils summary: Parses the query into an 'SQL like' query expression operationId: parse_1 requestBody: content: application/json: schema: $ref: '#/components/schemas/DataProductQuery' required: true responses: '200': description: The parsed query content: application/json: schema: type: array items: type: string /api/v1/utils/describe/query/ephemeris: post: tags: - Utils summary: Parses the query into an 'SQL like' query expression operationId: parse_2 requestBody: content: application/json: schema: $ref: '#/components/schemas/EphemerisQuery' required: true responses: '200': description: The parsed query content: application/json: schema: type: array items: type: string components: schemas: DataSourceCriteriaForEphemeris: type: object properties: programs: type: array description: The list of programs in e1 or e2. Programs group platforms. Programs are like 'themis', 'swarm', 'themis-asi', 'TRex' items: type: string description: The list of programs in e1 or e2. Programs group platforms. Programs are like 'themis', 'swarm', 'themis-asi', 'TRex' platforms: type: array description: The list of platforms in e1 or e2. Platforms are like 'themis-asi gill' or 'swarma'. Use this to narrow the set of sources within the programs listed. items: type: string description: The list of platforms in e1 or e2. Platforms are like 'themis-asi gill' or 'swarma'. Use this to narrow the set of sources within the programs listed. instrument_types: type: array description: The list of instrument-types in e1 or e2. Instrument types are like 'panchromatic-asi'. A platform may have zero or more instrument types. items: type: string description: The list of instrument-types in e1 or e2. Instrument types are like 'panchromatic-asi'. A platform may have zero or more instrument types. ephemeris_metadata_filters: $ref: '#/components/schemas/MetadataExpressionGroup' description: Find Ephemeris data for these Data Sources. This could be a single platform (e.g., gillam; or swarma), or an entire program containing a group of platforms (e.g., all locations in the themis-asi program; or all satellites in the themis program). EphemerisCriteriaGround: type: object properties: programs: type: array description: The list of programs in e1 or e2. Programs group platforms. Programs are like 'themis', 'swarm', 'themis-asi', 'TRex' items: type: string description: The list of programs in e1 or e2. Programs group platforms. Programs are like 'themis', 'swarm', 'themis-asi', 'TRex' platforms: type: array description: The list of platforms in e1 or e2. Platforms are like 'themis-asi gill' or 'swarma'. Use this to narrow the set of sources within the programs listed. items: type: string description: The list of platforms in e1 or e2. Platforms are like 'themis-asi gill' or 'swarma'. Use this to narrow the set of sources within the programs listed. instrument_types: type: array description: The list of instrument-types in e1 or e2. Instrument types are like 'panchromatic-asi'. A platform may have zero or more instrument types. items: type: string description: The list of instrument-types in e1 or e2. Instrument types are like 'panchromatic-asi'. A platform may have zero or more instrument types. ephemeris_metadata_filters: $ref: '#/components/schemas/MetadataExpressionGroup' description: Defines the ephemeris particpants in the conjunction that are ground stations. Participants in each these criteria are OR'd while participants in different criteria are AND'd. SuperConjunctionQuery: type: object properties: request_id: type: string description: An optional request_id to be used for this query. Ommit to have the API generate one for you. If you are using websockets, this id can be used establish a websocket before sending the search request to avoid a race condition of the query finishing before websocket is established. This technique is used by the AuroraX website ground: type: array description: Defines the ephemeris particpants in the conjunction that are ground stations. Participants in each these criteria are OR'd while participants in different criteria are AND'd. items: $ref: '#/components/schemas/EphemerisCriteriaGround' space: type: array description: Defines the ephemeris particpants in the conjunction that are satellites. Participants in each of these criteria are OR'd while participants in different criteria are AND'd. items: $ref: '#/components/schemas/EphemerisCriteriaSpace' events: type: array description: Defines the particpants in the conjunction that are events. Participants in each of these criteria are OR'd while participants in different criteria are AND'd. items: $ref: '#/components/schemas/EphemerisCriteriaEvent' adhoc: type: array description: Defines the particpants in the conjunction that are locations of your choice. Participants in each of these criteria are OR'd while participants in different criteria are AND'd. items: $ref: '#/components/schemas/EphemerisCriteriaAdhocLatLon' start: type: string description: Return conjunction events that occured after this timestamp. Optional. Large time windows may take a long time for results to return. format: date-time end: type: string description: Return conjunction events that occured before this timestamp. Optional. Large time windows may take a long time for results to return. format: date-time conjunction_types: type: array description: Return conjunctions of any North B-Trace, Sourth B-Trace, and Geo Location. items: type: string description: Return conjunctions of any North B-Trace, Sourth B-Trace, and Geo Location. enum: - nbtrace - sbtrace - geographic max_distances: type: object additionalProperties: type: integer description: Return conjunctions there were within this distance (km) between criteria blocks. ground-ground defaults to 0. Null defaults to 2^31. format: int32 description: Return conjunctions there were within this distance (km) between criteria blocks. ground-ground defaults to 0. Null defaults to 2^31. example: ground1-space1: 300 ground2-space1: 400 ground1-events1: 900 space1-space2: null adhoc1-space1: 700 epoch_search_precision: type: integer description: Runs the query with higher fidelity and interpolates each 30 second epoch. Queries can be much slower using this method, but a greater number of results may be found. format: int32 default: 60 enum: - 30 - 60 description: There must be at least 2 Ephemeris Criteria in order to calculate the distance between them in a conjunction. SearchRequestListing: type: object properties: search_type: type: string description: The type of search request (e.g., ephemeris, conjunction, etc.) enum: - conjunction - ephemeris - data_product ip_address: type: string description: The IP address that requested the search request_id: type: string description: The unique request id requested: type: string description: The date and time when the search was requested format: date-time active: type: boolean description: The request is currently active (not completed). query_duration: type: integer description: How long the query is/was running for in milliseconds format: int64 result_file_exists: type: boolean description: True if the result file still exists file_size: type: integer description: The size of the file in bytes (even if deleted, the size of the file that was). Null if there is no result file found. format: int64 result_count: type: integer description: The number of results this search yielded. Null if there is no result yet. format: int32 error_condition: type: boolean description: If the search ended with an error condition description: Search request listing MetadataExpression: type: object properties: key: type: string description: The metadata key found as described in the data_source metadata schema record operator: type: string description: The filter expression operator enum: - '=' - < - <= - '>' - '>=' - '!=' - in - not in - between values: type: array description: The value(s) to test for. Note that 'in' and 'not-in' accept a list of values; 'between' accepts two values; all others accept just one value items: type: string description: The value(s) to test for. Note that 'in' and 'not-in' accept a list of values; 'between' accepts two values; all others accept just one value description: An expression like a where clause in SQL EphemerisCriteriaEvent: type: object properties: programs: type: array description: The list of programs in e1 or e2. Programs group platforms. Programs are like 'themis', 'swarm', 'themis-asi', 'TRex' items: type: string description: The list of programs in e1 or e2. Programs group platforms. Programs are like 'themis', 'swarm', 'themis-asi', 'TRex' platforms: type: array description: The list of platforms in e1 or e2. Platforms are like 'themis-asi gill' or 'swarma'. Use this to narrow the set of sources within the programs listed. items: type: string description: The list of platforms in e1 or e2. Platforms are like 'themis-asi gill' or 'swarma'. Use this to narrow the set of sources within the programs listed. instrument_types: type: array description: The list of instrument-types in e1 or e2. Instrument types are like 'panchromatic-asi'. A platform may have zero or more instrument types. items: type: string description: The list of instrument-types in e1 or e2. Instrument types are like 'panchromatic-asi'. A platform may have zero or more instrument types. ephemeris_metadata_filters: $ref: '#/components/schemas/MetadataExpressionGroup' description: Defines the particpants in the conjunction that are events. Participants in each of these criteria are OR'd while participants in different criteria are AND'd. EphemerisCriteriaSpace: type: object properties: programs: type: array description: The list of programs in e1 or e2. Programs group platforms. Programs are like 'themis', 'swarm', 'themis-asi', 'TRex' items: type: string description: The list of programs in e1 or e2. Programs group platforms. Programs are like 'themis', 'swarm', 'themis-asi', 'TRex' platforms: type: array description: The list of platforms in e1 or e2. Platforms are like 'themis-asi gill' or 'swarma'. Use this to narrow the set of sources within the programs listed. items: type: string description: The list of platforms in e1 or e2. Platforms are like 'themis-asi gill' or 'swarma'. Use this to narrow the set of sources within the programs listed. instrument_types: type: array description: The list of instrument-types in e1 or e2. Instrument types are like 'panchromatic-asi'. A platform may have zero or more instrument types. items: type: string description: The list of instrument-types in e1 or e2. Instrument types are like 'panchromatic-asi'. A platform may have zero or more instrument types. hemisphere: type: array description: Filter these satellites to the hemisphere they are currently in geographicly items: type: string description: Filter these satellites to the hemisphere they are currently in geographicly enum: - northern - southern ephemeris_metadata_filters: $ref: '#/components/schemas/MetadataExpressionGroup' description: Defines the ephemeris particpants in the conjunction that are satellites. Participants in each of these criteria are OR'd while participants in different criteria are AND'd. Location: type: object properties: lat: maximum: 90 minimum: -90 type: number lon: maximum: 180 minimum: -180 type: number description: A list of latitude and longitude locations of your choice MetadataExpressionGroup: type: object properties: logical_operator: type: string description: Specifies if these filters should be OR'd or AND'd. If omitted, the default is to AND the expressions together enum: - AND - OR expressions: type: array description: The list of filter expressions items: $ref: '#/components/schemas/MetadataExpression' description: An expression group to allow for OR'd or AND'd expression filters DataSourcesCriteriaForDataProducts: type: object properties: programs: type: array description: The list of programs in e1 or e2. Programs group platforms. Programs are like 'themis', 'swarm', 'themis-asi', 'TRex' items: type: string description: The list of programs in e1 or e2. Programs group platforms. Programs are like 'themis', 'swarm', 'themis-asi', 'TRex' platforms: type: array description: The list of platforms in e1 or e2. Platforms are like 'themis-asi gill' or 'swarma'. Use this to narrow the set of sources within the programs listed. items: type: string description: The list of platforms in e1 or e2. Platforms are like 'themis-asi gill' or 'swarma'. Use this to narrow the set of sources within the programs listed. instrument_types: type: array description: The list of instrument-types in e1 or e2. Instrument types are like 'panchromatic-asi'. A platform may have zero or more instrument types. items: type: string description: The list of instrument-types in e1 or e2. Instrument types are like 'panchromatic-asi'. A platform may have zero or more instrument types. data_product_metadata_filters: $ref: '#/components/schemas/MetadataExpressionGroup' description: Find data products generated from data of these Data Sources. This could be a single platform (e.g., gillam; or swarma), or an entire program containing a group of platforms (e.g., all locations in the themis-asi program; or all satellites in the themis program). DataProductQuery: type: object properties: request_id: type: string description: An optional request_id to be used for this query. Ommit to have the API generate one for you. If you are using websockets, this id can be used establish a websocket before sending the search request to avoid a race condition of the query finishing before websocket is established. This technique is used by the AuroraX website data_sources: $ref: '#/components/schemas/DataSourcesCriteriaForDataProducts' start: type: string description: Return data products that have a start date equal or after this this timestamp. Optional. Large time windows may take a long time for results to return. format: date-time end: type: string description: Return data products that have an end date equal of before this timestamp. Optional. Large time windows may take a long time for results to return. format: date-time data_product_type_filters: type: array description: Filter the data products to return only these data product types. items: type: string description: Filter the data products to return only these data product types. enum: - keogram - montage - movie - summary_plot - data_availability EphemerisCriteriaAdhocLatLon: required: - locations type: object properties: locations: type: array description: A list of latitude and longitude locations of your choice items: $ref: '#/components/schemas/Location' description: Defines a geographical location (latitude, longitude) on Earth's surface to use as a criterion for calculating distance measurements between other criteria objects ErrorDocument: type: object properties: error_message: type: string description: If an error code exists, this will have contextual information for debugging error_code: type: string description: The error code enum: - Nil - Ok - NotPermitted - NotAuthorized - Duplicate - AssertionError - NotFound - ApplicationError - NotImplemented - ToManyRequests - Other - Conflict - NotAuthenticated - Unavailable description: This model provides additional details about error conditions that can be used for debugging. EphemerisQuery: required: - data_sources type: object properties: request_id: type: string description: An optional request_id to be used for this query. Ommit to have the API generate one for you. If you are using websockets, this id can be used establish a websocket before sending the search request to avoid a race condition of the query finishing before websocket is established. This technique is used by the AuroraX website data_sources: $ref: '#/components/schemas/DataSourceCriteriaForEphemeris' start: type: string description: Return ephemeris data that occured after this timestamp. Optional. Large time windows may take a long time for results to return. format: date-time end: type: string description: Return ephemeris data that occured before this timestamp. Optional. Large time windows may take a long time for results to return. format: date-time securitySchemes: AccessToken: type: http description: Send the Authorization header found in the response of a successful /authentication request on all secure endpoints. Copy it verbatim to the request header. It is fine to send this header on all requests to the API. The value in Swagger UI should only include the access token part (leave out 'Bearer'). name: Authorization in: header scheme: bearer bearerFormat: Generated by server ApiKeyAuth: type: apiKey description: API keys are intended to be used by non-interactive software interfacing with the REST API. These can be used instead of an Access Token approach. name: x-aurorax-api-key in: header