NASA APOD APOD API

Astronomy Picture of the Day endpoints

OpenAPI Specification

nasa-apod-apod-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: NASA Astronomy Picture of the Day () APOD API
  description: 'NASA Astronomy Picture of the Day (APOD) REST API providing daily astronomy images and explanations curated by NASA scientists. Supports retrieval by specific date, date ranges, and random selection, with high-definition image URLs, media type detection, and optional concept tags derived from image metadata. Data is available from 1995-06-16 onward.

    '
  version: 1.0.0
  contact:
    name: NASA API Support
    url: https://api.nasa.gov/
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
  termsOfService: https://api.nasa.gov/
servers:
- url: https://api.nasa.gov/planetary
  description: NASA API Production Server
security:
- ApiKeyQuery: []
tags:
- name: APOD
  description: Astronomy Picture of the Day endpoints
paths:
  /apod:
    get:
      tags:
      - APOD
      operationId: getApod
      summary: Get Astronomy Picture of the Day
      description: 'Returns the Astronomy Picture of the Day with title, explanation, image URL, HD image URL, media type, copyright, and optional concept tags. Supports date-based filtering, date-range queries, and random image selection. Cannot combine count with date or start_date/end_date.

        '
      parameters:
      - name: api_key
        in: query
        description: 'api.nasa.gov key for expanded usage. Use DEMO_KEY for limited testing (30 requests/hour, 50 requests/day).

          '
        required: false
        schema:
          type: string
          default: DEMO_KEY
          example: DEMO_KEY
      - name: date
        in: query
        description: 'A string in YYYY-MM-DD format indicating the date of the APOD image. Defaults to today''s date. Must be after 1995-06-16, the first day an APOD picture was posted. Cannot be used with count, start_date, or end_date.

          '
        required: false
        schema:
          type: string
          format: date
          example: '2014-10-01'
      - name: start_date
        in: query
        description: 'A string in YYYY-MM-DD format indicating the start of a date range. All images in the range from start_date to end_date will be returned in a JSON array. Cannot be used with date or count.

          '
        required: false
        schema:
          type: string
          format: date
          example: '2017-07-08'
      - name: end_date
        in: query
        description: 'A string in YYYY-MM-DD format indicating the end of a date range. If start_date is specified without an end_date then end_date defaults to the current date. Cannot be used with date or count.

          '
        required: false
        schema:
          type: string
          format: date
          example: '2017-07-10'
      - name: count
        in: query
        description: 'A positive integer, no greater than 100. If specified then count randomly chosen images will be returned in a JSON array. Cannot be used in conjunction with date, start_date, or end_date.

          '
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 100
          example: 5
      - name: concept_tags
        in: query
        description: 'A boolean True|False indicating whether concept tags should be returned with the rest of the response. Concept tags are derived from common search tags associated with the description text. Defaults to False. Note: concept_tags functionality may be disabled in the current service deployment.

          '
        required: false
        schema:
          type: boolean
          default: false
      - name: hd
        in: query
        description: 'A boolean True|False parameter indicating whether or not high-resolution images should be returned. Present for legacy purposes only — it is always ignored by the service and high-resolution URLs are returned regardless.

          '
        required: false
        schema:
          type: boolean
          default: false
      - name: thumbs
        in: query
        description: 'A boolean parameter True|False indicating whether the API should return a thumbnail image URL for video files. If set to True, the API returns URL of video thumbnail. If an APOD is not a video, this parameter is ignored.

          '
        required: false
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: 'Successful response. Returns a single APOD object when querying by date (or defaulting to today), or a JSON array of APOD objects when using count, start_date/end_date.

            '
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/ApodEntry'
                - type: array
                  items:
                    $ref: '#/components/schemas/ApodEntry'
              examples:
                single:
                  summary: Single APOD entry
                  $ref: '#/components/examples/SingleApodEntry'
                multiple:
                  summary: Multiple APOD entries
                  $ref: '#/components/examples/MultipleApodEntries'
        '400':
          description: Bad request — invalid parameters or parameter combination
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                msg: Date must be between Jun 16, 1995 and today.
                code: 400
                service_version: v1
        '404':
          description: No data available for the requested date
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                msg: 'No data available for date: 2020-01-01'
                code: 404
                service_version: v1
        '500':
          description: Internal service error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    ErrorResponse:
      type: object
      description: Error response returned on bad requests or server errors
      properties:
        msg:
          type: string
          description: Human-readable error message
          example: 'Bad Request: incorrect field passed.'
        code:
          type: integer
          description: HTTP status code
          example: 400
        service_version:
          type: string
          description: The service version that generated the error
          example: v1
    ApodEntry:
      type: object
      description: A single Astronomy Picture of the Day entry
      required:
      - date
      - title
      - explanation
      - url
      - media_type
      - service_version
      properties:
        date:
          type: string
          format: date
          description: Date of the APOD entry in YYYY-MM-DD format
          example: '2014-10-01'
        title:
          type: string
          description: The title of the image or video
          example: Filaments of the Vela Supernova Remnant
        explanation:
          type: string
          description: Detailed explanation of the astronomy picture or video
          example: 'The explosion is over but the consequences continue. About eleven thousand years ago a star in the constellation of Vela could be seen to explode...

            '
        url:
          type: string
          format: uri
          description: The URL of the APOD image or video of the day
          example: https://apod.nasa.gov/apod/image/1310/velafilaments_jadescope_960.jpg
        hdurl:
          type: string
          format: uri
          description: 'The URL for the high-resolution image. Omitted if it does not exist originally at APOD. Not present for video media type.

            '
          example: https://apod.nasa.gov/apod/image/1310/velafilaments_jadescope_2000.jpg
        media_type:
          type: string
          description: 'The type of media returned. Either ''image'' or ''video'' depending on the APOD content.

            '
          enum:
          - image
          - video
          example: image
        service_version:
          type: string
          description: The service version used to fulfill the request
          example: v1
        copyright:
          type: string
          description: 'The name of the copyright holder. Only present if the image is not in the public domain. Absence indicates NASA/public domain.

            '
          example: Panther Observatory
        concepts:
          type: object
          description: 'An ordered dictionary of concepts derived from the APOD explanation text. Only returned when concept_tags=True. May be a string message if concept tagging is disabled in the service.

            '
          additionalProperties:
            type: string
          example:
            '0': Astronomy
            '1': Star
            '2': Sun
            '3': Milky Way
        thumbnail_url:
          type: string
          format: uri
          description: 'The URL of the video thumbnail. Only present when thumbs=True and media_type is ''video''.

            '
          example: https://img.youtube.com/vi/example/0.jpg
        resource:
          type: object
          description: 'A dictionary describing the image_set or planet that the response illustrates, determined by the structured endpoint.

            '
          properties:
            image_set:
              type: string
              example: apod
        concept_tags:
          type: boolean
          description: 'Reflection of the supplied concept_tags option. Included in response because of default values.

            '
          example: false
  examples:
    SingleApodEntry:
      value:
        date: '2014-10-01'
        title: Filaments of the Vela Supernova Remnant
        explanation: 'The explosion is over but the consequences continue. About eleven thousand years ago a star in the constellation of Vela could be seen to explode, creating a strange point of light briefly visible to humans living near the beginning of recorded history.

          '
        url: https://apod.nasa.gov/apod/image/1310/velafilaments_jadescope_960.jpg
        hdurl: https://apod.nasa.gov/apod/image/1310/velafilaments_jadescope_2000.jpg
        media_type: image
        service_version: v1
        concept_tags: 'True'
        concepts:
          '0': Astronomy
          '1': Star
          '2': Sun
          '3': Milky Way
          '4': Hubble Space Telescope
          '5': Earth
          '6': Nebula
          '7': Interstellar medium
    MultipleApodEntries:
      value:
      - copyright: Panther Observatory
        date: '2006-04-15'
        explanation: 'In this stunning cosmic vista, galaxy M81 is on the left surrounded by blue spiral arms. On the right marked by massive gas and dust clouds, is M82.

          '
        hdurl: https://apod.nasa.gov/apod/image/0604/M81_M82_schedler_c80.jpg
        media_type: image
        service_version: v1
        title: 'Galaxy Wars: M81 versus M82'
        url: https://apod.nasa.gov/apod/image/0604/M81_M82_schedler_c25.jpg
      - date: '2013-07-22'
        explanation: 'You are here. Everyone you''ve ever known is here. Every human who has ever lived -- is here.

          '
        hdurl: https://apod.nasa.gov/apod/image/1307/earthmoon2_cassini_946.jpg
        media_type: image
        service_version: v1
        title: Earth and Moon from Saturn
        url: https://apod.nasa.gov/apod/image/1307/earthmoon2_cassini_960.jpg
  securitySchemes:
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api_key
      description: 'NASA API key. Register for a free key at https://api.nasa.gov/#signUp. Use DEMO_KEY for testing (rate limits apply).

        '