giphy-api: Giphy HTTP API wrapper and CLI search tool.

[ bsd3, library, web ] [ Propose Tags ]

Please see

[Skip to Readme]


[Last Documentation]

  • Web
    • Web.Giphy


Manual Flags


Build the sample application.


Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS],,,,,,,,,,,,,,
Change log
Dependencies aeson, base (>=4.8 && <5), containers, http-api-data, http-client, http-client-tls, microlens, microlens-th, mtl, network-uri, servant (>=0.6 && <0.9), servant-client (>=0.6 && <0.9), text, transformers [details]
License BSD-3-Clause
Author Pascal Hartig
Maintainer Pascal Hartig <>
Revised Revision 2 made by HerbertValerioRiedel at 2016-11-28T20:26:45Z
Category Web
Home page
Uploaded by passy at 2016-04-06T22:42:00Z
Reverse Dependencies 1 direct, 0 indirect [details]
Executables giphy-search
Downloads 9752 total (18 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
All reported builds failed as of 2016-11-27 [all 2 reports]

Readme for giphy-api-

[back to package description]


Build Status Hackage

A Haskell wrapper for the Giphy HTTP API using servant-client.


The module provides a Giphy monad which can be run with runGiphy to lift it into IO. Here's a simple usage example:

{-# LANGUAGE OverloadedStrings #-}

import qualified Data.Text as T
import qualified Web.Giphy as Giphy

apiKey :: Giphy.Key
apiKey = Giphy.Key "dc6zaTOxFJmzC"

sample :: IO ()
sample = do
  let config = Giphy.GiphyConfig apiKey
  resp <- Giphy.runGiphy (app "puppies") config
  print resp

    app :: T.Text -> Giphy.Giphy [Giphy.Gif]
    app q = do
      resp <- $ Giphy.Query q
      return $ Giphy._searchItems resp

For a slightly more complex example, check out the sample app, which also features the use of lenses.


Use stack to build this library.

$ stack setup
$ stack test
# Drop the flag if you don't want the sample app to be built.
$ stack build --flag=giphy-api:buildSample
# To install the sample tool
$ stack install

Sample CLI Tool Usage

$ giphy-search --help

Usage: giphy-search ([-s|--search ARG] | [-t|--translate ARG] | [RANDOM_TAG])
  Find GIFs on the command line.

Available options:
  -h,--help                Show this help text
  -s,--search ARG          Use search to find a matching GIF.
  -t,--translate ARG       Use translate to find a matching GIF.
  -V,--version             Show version information
$ giphy-search puppies
$ giphy-search --translate superman
$ giphy-search "1C4D539A-B787-497F-B1DC-8FCF8D2C026D"

Missing features

  • No network configuration. No proxies, no TLS certificate pinning, no custom networking stack. I'm still learning, let me know how to do this better!

  • There is no compiler flag at the moment to disable lenses if those aren't needed. The library, however, uses microlens so the overhead should be minimal.

  • The "Stickers" API endpoints are currently not covered. If you need them, let me know. PRs obviously very welcome.

  • Some fields are currently not exposed. Again, if you need them, open an issue. For example, I have never seen a type value other than "gif" so I decided to skip it.