Imgur API v3

RESTful HTTP/JSON API for Imgur covering images, albums, the public gallery, comments, accounts, tags, topics, meme generation, and notifications.

Documentation

Specifications

Examples

Schemas & Data

📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/imgur/refs/heads/main/json-schema/imgur-image-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/imgur/refs/heads/main/json-schema/imgur-album-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/imgur/refs/heads/main/json-schema/imgur-comment-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/imgur/refs/heads/main/json-schema/imgur-account-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/imgur/refs/heads/main/json-schema/imgur-gallery-item-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/imgur/refs/heads/main/json-schema/imgur-tag-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/imgur/refs/heads/main/json-schema/imgur-access-token-schema.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/imgur/refs/heads/main/json-structure/imgur-image-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/imgur/refs/heads/main/json-structure/imgur-album-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/imgur/refs/heads/main/json-structure/imgur-comment-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/imgur/refs/heads/main/json-structure/imgur-account-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/imgur/refs/heads/main/json-structure/imgur-gallery-item-structure.json

Other Resources

OpenAPI Specification

imgur-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Imgur API
  version: '3.0'
  description: >-
    Imgur is an online image and album hosting platform. The Imgur API (v3) is a RESTful
    HTTP/JSON API that exposes the platform — uploading, retrieving, voting, commenting,
    galleries, accounts, and tags. Anonymous reads/writes are supported with a Client-ID,
    and per-user actions require OAuth2 access tokens.
  contact:
    name: Imgur API Support
    url: https://help.imgur.com/
  license:
    name: Imgur API Terms
    url: https://imgur.com/tos
servers:
  - url: https://api.imgur.com
    description: Imgur API root
tags:
  - name: Auth
    description: OAuth2 token issuance and refresh.
  - name: Image
    description: Image upload, retrieval, deletion, favorite, and update operations.
  - name: Album
    description: Album creation, retrieval, and image-management operations.
  - name: Gallery
    description: Public gallery listing, voting, sharing, and reporting.
  - name: Comment
    description: Comments on gallery items.
  - name: Account
    description: Account-scoped data: profile, images, albums, favorites, settings, notifications.
  - name: Tags
    description: Tag-based gallery browsing and tagging of gallery items.
  - name: Memegen
    description: Meme generation and meme defaults.
  - name: Notification
    description: User notification retrieval and dismissal.
  - name: Topic
    description: Topic listings and topic galleries.
paths:
  /oauth2/authorize:
    get:
      tags: [Auth]
      summary: Authorize User
      operationId: authorizeUser
      description: Begin the OAuth2 authorization-code or token grant flow.
      parameters:
        - name: client_id
          in: query
          required: true
          schema: { type: string }
        - name: response_type
          in: query
          required: true
          schema: { type: string, enum: [code, token, pin] }
        - name: state
          in: query
          schema: { type: string }
      responses:
        '302':
          description: Redirect To Configured Callback With Code Or Token.
  /oauth2/token:
    post:
      tags: [Auth]
      summary: Issue Access Token
      operationId: issueAccessToken
      description: Exchange an authorization code, refresh token, or PIN for an access token.
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [client_id, client_secret, grant_type]
              properties:
                client_id: { type: string }
                client_secret: { type: string }
                grant_type:
                  type: string
                  enum: [authorization_code, refresh_token, pin]
                code: { type: string }
                refresh_token: { type: string }
                pin: { type: string }
      responses:
        '200':
          description: New Access Token Issued.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/AccessToken' }

  /3/image:
    post:
      tags: [Image]
      summary: Upload Image
      operationId: uploadImage
      description: Upload an image (binary, base64, or URL).
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                image: { type: string, format: binary }
                type: { type: string, enum: [file, base64, url] }
                title: { type: string }
                description: { type: string }
                album: { type: string }
      responses:
        '200':
          description: Image Uploaded.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/BasicResponse' }
  /3/image/{imageHash}:
    get:
      tags: [Image]
      summary: Get Image
      operationId: getImage
      parameters:
        - $ref: '#/components/parameters/ImageHash'
      responses:
        '200':
          description: Image Metadata.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/BasicResponse' }
    delete:
      tags: [Image]
      summary: Delete Image
      operationId: deleteImage
      parameters:
        - $ref: '#/components/parameters/ImageHash'
      responses:
        '200':
          description: Image Deleted.
    post:
      tags: [Image]
      summary: Update Image Information
      operationId: updateImage
      parameters:
        - $ref: '#/components/parameters/ImageHash'
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                title: { type: string }
                description: { type: string }
      responses:
        '200':
          description: Image Updated.
  /3/image/{imageHash}/favorite:
    post:
      tags: [Image]
      summary: Favorite Image
      operationId: favoriteImage
      parameters:
        - $ref: '#/components/parameters/ImageHash'
      responses:
        '200':
          description: Favorite Toggled.

  /3/album/{albumHash}:
    get:
      tags: [Album]
      summary: Get Album
      operationId: getAlbum
      parameters:
        - $ref: '#/components/parameters/AlbumHash'
      responses:
        '200':
          description: Album Metadata.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/BasicResponse' }
    delete:
      tags: [Album]
      summary: Delete Album
      operationId: deleteAlbum
      parameters:
        - $ref: '#/components/parameters/AlbumHash'
      responses:
        '200':
          description: Album Deleted.
    put:
      tags: [Album]
      summary: Update Album
      operationId: updateAlbum
      parameters:
        - $ref: '#/components/parameters/AlbumHash'
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                title: { type: string }
                description: { type: string }
                ids: { type: array, items: { type: string } }
                privacy: { type: string, enum: [public, hidden, secret] }
                layout: { type: string, enum: [blog, grid, horizontal, vertical] }
                cover: { type: string }
      responses:
        '200':
          description: Album Updated.
  /3/album:
    post:
      tags: [Album]
      summary: Create Album
      operationId: createAlbum
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                title: { type: string }
                description: { type: string }
                ids: { type: array, items: { type: string } }
                privacy: { type: string, enum: [public, hidden, secret] }
      responses:
        '200':
          description: Album Created.
  /3/album/{albumHash}/images:
    get:
      tags: [Album]
      summary: Get Album Images
      operationId: getAlbumImages
      parameters:
        - $ref: '#/components/parameters/AlbumHash'
      responses:
        '200':
          description: Image List.
  /3/album/{albumHash}/favorite:
    post:
      tags: [Album]
      summary: Favorite Album
      operationId: favoriteAlbum
      parameters:
        - $ref: '#/components/parameters/AlbumHash'
      responses:
        '200':
          description: Favorite Toggled.

  /3/gallery/{section}/{sort}/{window}/{page}:
    get:
      tags: [Gallery]
      summary: Get Gallery
      operationId: getGallery
      parameters:
        - name: section
          in: path
          required: true
          schema: { type: string, enum: [hot, top, user] }
        - name: sort
          in: path
          required: true
          schema: { type: string, enum: [viral, top, time, rising] }
        - name: window
          in: path
          required: true
          schema: { type: string, enum: [day, week, month, year, all] }
        - name: page
          in: path
          required: true
          schema: { type: integer, default: 0 }
      responses:
        '200':
          description: Gallery Items.
  /3/gallery/search:
    get:
      tags: [Gallery]
      summary: Search Gallery
      operationId: searchGallery
      parameters:
        - name: q
          in: query
          required: true
          schema: { type: string }
        - name: sort
          in: query
          schema: { type: string }
      responses:
        '200':
          description: Search Results.
  /3/gallery/image/{galleryHash}:
    get:
      tags: [Gallery]
      summary: Get Gallery Image
      operationId: getGalleryImage
      parameters:
        - name: galleryHash
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Gallery Image.
  /3/gallery/album/{galleryHash}:
    get:
      tags: [Gallery]
      summary: Get Gallery Album
      operationId: getGalleryAlbum
      parameters:
        - name: galleryHash
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Gallery Album.
  /3/gallery/{galleryHash}/vote/{vote}:
    post:
      tags: [Gallery]
      summary: Vote On Gallery Item
      operationId: voteGalleryItem
      parameters:
        - name: galleryHash
          in: path
          required: true
          schema: { type: string }
        - name: vote
          in: path
          required: true
          schema: { type: string, enum: [up, down, veto] }
      responses:
        '200':
          description: Vote Recorded.
  /3/gallery/{galleryHash}/report:
    post:
      tags: [Gallery]
      summary: Report Gallery Item
      operationId: reportGalleryItem
      parameters:
        - name: galleryHash
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Report Submitted.
  /3/gallery/image:
    post:
      tags: [Gallery]
      summary: Submit Image To Gallery
      operationId: submitImageToGallery
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [title]
              properties:
                title: { type: string }
                topic: { type: string }
                terms: { type: integer, enum: [0, 1] }
      responses:
        '200':
          description: Image Submitted.

  /3/comment/{commentId}:
    get:
      tags: [Comment]
      summary: Get Comment
      operationId: getComment
      parameters:
        - name: commentId
          in: path
          required: true
          schema: { type: integer }
      responses:
        '200':
          description: Comment Details.
    delete:
      tags: [Comment]
      summary: Delete Comment
      operationId: deleteComment
      parameters:
        - name: commentId
          in: path
          required: true
          schema: { type: integer }
      responses:
        '200':
          description: Comment Deleted.
  /3/comment:
    post:
      tags: [Comment]
      summary: Create Comment
      operationId: createComment
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [image_id, comment]
              properties:
                image_id: { type: string }
                comment: { type: string }
                parent_id: { type: string }
      responses:
        '200':
          description: Comment Created.
  /3/comment/{commentId}/reply:
    post:
      tags: [Comment]
      summary: Reply To Comment
      operationId: replyToComment
      parameters:
        - name: commentId
          in: path
          required: true
          schema: { type: integer }
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [image_id, comment]
              properties:
                image_id: { type: string }
                comment: { type: string }
      responses:
        '200':
          description: Reply Posted.
  /3/comment/{commentId}/vote/{vote}:
    post:
      tags: [Comment]
      summary: Vote On Comment
      operationId: voteOnComment
      parameters:
        - name: commentId
          in: path
          required: true
          schema: { type: integer }
        - name: vote
          in: path
          required: true
          schema: { type: string, enum: [up, down] }
      responses:
        '200':
          description: Vote Recorded.

  /3/account/{username}:
    get:
      tags: [Account]
      summary: Get Account
      operationId: getAccount
      parameters:
        - $ref: '#/components/parameters/Username'
      responses:
        '200':
          description: Account Profile.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/BasicResponse' }
  /3/account/{username}/images:
    get:
      tags: [Account]
      summary: Get Account Images
      operationId: getAccountImages
      parameters:
        - $ref: '#/components/parameters/Username'
      responses:
        '200':
          description: Image List.
  /3/account/{username}/albums:
    get:
      tags: [Account]
      summary: Get Account Albums
      operationId: getAccountAlbums
      parameters:
        - $ref: '#/components/parameters/Username'
      responses:
        '200':
          description: Album List.
  /3/account/{username}/comments:
    get:
      tags: [Account]
      summary: Get Account Comments
      operationId: getAccountComments
      parameters:
        - $ref: '#/components/parameters/Username'
      responses:
        '200':
          description: Comment List.
  /3/account/{username}/favorites:
    get:
      tags: [Account]
      summary: Get Account Favorites
      operationId: getAccountFavorites
      parameters:
        - $ref: '#/components/parameters/Username'
      responses:
        '200':
          description: Favorite List.
  /3/account/{username}/gallery_favorites:
    get:
      tags: [Account]
      summary: Get Gallery Favorites
      operationId: getAccountGalleryFavorites
      parameters:
        - $ref: '#/components/parameters/Username'
      responses:
        '200':
          description: Gallery Favorite List.
  /3/account/{username}/submissions:
    get:
      tags: [Account]
      summary: Get Account Submissions
      operationId: getAccountSubmissions
      parameters:
        - $ref: '#/components/parameters/Username'
      responses:
        '200':
          description: Submission List.
  /3/account/{username}/settings:
    get:
      tags: [Account]
      summary: Get Account Settings
      operationId: getAccountSettings
      parameters:
        - $ref: '#/components/parameters/Username'
      responses:
        '200':
          description: Settings.
    put:
      tags: [Account]
      summary: Update Account Settings
      operationId: updateAccountSettings
      parameters:
        - $ref: '#/components/parameters/Username'
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                bio: { type: string }
                public_images: { type: boolean }
                messaging_enabled: { type: boolean }
                album_privacy: { type: string }
                accepted_gallery_terms: { type: boolean }
                username: { type: string }
                show_mature: { type: boolean }
                newsletter_subscribed: { type: boolean }
      responses:
        '200':
          description: Settings Updated.
  /3/account/me/notifications:
    get:
      tags: [Account, Notification]
      summary: Get Account Notifications
      operationId: getAccountNotifications
      responses:
        '200':
          description: Notification List.
  /3/notification/{notificationId}:
    get:
      tags: [Notification]
      summary: Get Notification
      operationId: getNotification
      parameters:
        - name: notificationId
          in: path
          required: true
          schema: { type: integer }
      responses:
        '200':
          description: Notification Details.
    post:
      tags: [Notification]
      summary: Mark Notification Viewed
      operationId: markNotificationViewed
      parameters:
        - name: notificationId
          in: path
          required: true
          schema: { type: integer }
      responses:
        '200':
          description: Notification Marked Viewed.

  /3/tags:
    get:
      tags: [Tags]
      summary: Get Default Tags
      operationId: getDefaultTags
      responses:
        '200':
          description: Default Tag List.
  /3/gallery/t/{tagName}:
    get:
      tags: [Tags]
      summary: Get Tag Gallery
      operationId: getTagGallery
      parameters:
        - name: tagName
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Tag Gallery.
  /3/gallery/t/{tagName}/{galleryHash}:
    get:
      tags: [Tags]
      summary: Get Tag Gallery Item
      operationId: getTagGalleryItem
      parameters:
        - name: tagName
          in: path
          required: true
          schema: { type: string }
        - name: galleryHash
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Tag Gallery Item.

  /3/memegen/defaults:
    get:
      tags: [Memegen]
      summary: Get Meme Defaults
      operationId: getMemeDefaults
      responses:
        '200':
          description: Default Meme List.

  /3/topics/defaults:
    get:
      tags: [Topic]
      summary: Get Default Topics
      operationId: getDefaultTopics
      responses:
        '200':
          description: Default Topic List.
  /3/topics/{topicId}/{sort}/{window}/{page}:
    get:
      tags: [Topic]
      summary: Get Topic Gallery
      operationId: getTopicGallery
      parameters:
        - name: topicId
          in: path
          required: true
          schema: { type: integer }
        - name: sort
          in: path
          required: true
          schema: { type: string, enum: [viral, top, time] }
        - name: window
          in: path
          required: true
          schema: { type: string, enum: [day, week, month, year, all] }
        - name: page
          in: path
          required: true
          schema: { type: integer }
      responses:
        '200':
          description: Topic Gallery.

  /3/credits:
    get:
      tags: [Account]
      summary: Get Rate Limit Credits
      operationId: getRateLimitCredits
      description: Return remaining client and user credits.
      responses:
        '200':
          description: Credit Status.

components:
  parameters:
    ImageHash:
      name: imageHash
      in: path
      required: true
      description: The image's seven-character hash (e.g. "AbCdEfG").
      schema: { type: string }
    AlbumHash:
      name: albumHash
      in: path
      required: true
      description: The album's seven-character hash.
      schema: { type: string }
    Username:
      name: username
      in: path
      required: true
      description: Account username, or "me" for the authenticated user.
      schema: { type: string }
  securitySchemes:
    ClientId:
      type: apiKey
      in: header
      name: Authorization
      description: "Anonymous access. Header value: `Client-ID <CLIENT_ID>`."
    OAuth2:
      type: oauth2
      description: Per-user OAuth2 authorization.
      flows:
        authorizationCode:
          authorizationUrl: https://api.imgur.com/oauth2/authorize
          tokenUrl: https://api.imgur.com/oauth2/token
          scopes: {}
  schemas:
    BasicResponse:
      type: object
      properties:
        data:
          description: Operation-specific payload.
        success:
          type: boolean
        status:
          type: integer
    AccessToken:
      type: object
      properties:
        access_token: { type: string }
        refresh_token: { type: string }
        expires_in: { type: integer }
        token_type: { type: string }
        account_id: { type: integer }
        account_username: { type: string }
    Image:
      type: object
      properties:
        id: { type: string }
        title: { type: string, nullable: true }
        description: { type: string, nullable: true }
        datetime: { type: integer }
        type: { type: string }
        animated: { type: boolean }
        width: { type: integer }
        height: { type: integer }
        size: { type: integer }
        views: { type: integer }
        bandwidth: { type: integer }
        deletehash: { type: string }
        section: { type: string, nullable: true }
        link: { type: string }
        nsfw: { type: boolean, nullable: true }
        is_album: { type: boolean }
    Album:
      type: object
      properties:
        id: { type: string }
        title: { type: string, nullable: true }
        description: { type: string, nullable: true }
        datetime: { type: integer }
        cover: { type: string, nullable: true }
        cover_width: { type: integer }
        cover_height: { type: integer }
        account_url: { type: string, nullable: true }
        account_id: { type: integer, nullable: true }
        privacy: { type: string, enum: [public, hidden, secret] }
        layout: { type: string, enum: [blog, grid, horizontal, vertical] }
        views: { type: integer }
        link: { type: string }
        images_count: { type: integer }
        images:
          type: array
          items: { $ref: '#/components/schemas/Image' }
    Comment:
      type: object
      properties:
        id: { type: integer }
        image_id: { type: string }
        comment: { type: string }
        author: { type: string }
        author_id: { type: integer }
        on_album: { type: boolean }
        album_cover: { type: string, nullable: true }
        ups: { type: integer }
        downs: { type: integer }
        points: { type: number }
        datetime: { type: integer }
        parent_id: { type: integer }
        deleted: { type: boolean }
        vote: { type: string, nullable: true }
        platform: { type: string, nullable: true }
        children:
          type: array
          items: { $ref: '#/components/schemas/Comment' }
    GalleryItem:
      type: object
      properties:
        id: { type: string }
        title: { type: string }
        description: { type: string, nullable: true }
        datetime: { type: integer }
        cover: { type: string, nullable: true }
        account_url: { type: string }
        account_id: { type: integer }
        privacy: { type: string }
        layout: { type: string }
        views: { type: integer }
        link: { type: string }
        ups: { type: integer }
        downs: { type: integer }
        points: { type: integer }
        score: { type: integer }
        is_album: { type: boolean }
        vote: { type: string, nullable: true }
        favorite: { type: boolean }
        nsfw: { type: boolean }
        comment_count: { type: integer }
        topic: { type: string, nullable: true }
        topic_id: { type: integer, nullable: true }
        tags:
          type: array
          items: { $ref: '#/components/schemas/Tag' }
    Account:
      type: object
      properties:
        id: { type: integer }
        url: { type: string }
        bio: { type: string, nullable: true }
        avatar: { type: string, nullable: true }
        cover: { type: string, nullable: true }
        reputation: { type: number }
        reputation_name: { type: string }
        created: { type: integer }
        pro_expiration: { type: integer, nullable: true }
        user_follow:
          type: object
          properties:
            status: { type: boolean }
        is_blocked: { type: boolean }
    Tag:
      type: object
      properties:
        name: { type: string }
        display_name: { type: string }
        followers: { type: integer }
        total_items: { type: integer }
        following: { type: boolean }
        background_hash: { type: string }
        thumbnail_hash: { type: string, nullable: true }
        accent: { type: string, nullable: true }
        background_is_animated: { type: boolean }
        thumbnail_is_animated: { type: boolean }
        is_promoted: { type: boolean }
        description: { type: string }
        logo_hash: { type: string, nullable: true }
        logo_destination_url: { type: string, nullable: true }
    Notification:
      type: object
      properties:
        id: { type: integer }
        account_id: { type: integer }
        viewed: { type: boolean }
        content:
          type: object
    RateLimitCredits:
      type: object
      properties:
        UserLimit: { type: integer }
        UserRemaining: { type: integer }
        UserReset: { type: integer }
        ClientLimit: { type: integer }
        ClientRemaining: { type: integer }
security:
  - ClientId: []
  - OAuth2: []