Skip to content
Elixir client libraries for accessing Google APIs.
Elixir Other
  1. Elixir 99.9%
  2. Other 0.1%
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
.kokoro Fix release scripts Nov 30, 2018
clients Regenerate Vision client (#2779) Oct 18, 2019
scripts Ensure file ownership Jun 14, 2019
specifications Reimplement generator in Elixir (#1327) Jun 14, 2019
template fix(generator): Limit hex description field to 299 characters (#2439) Aug 16, 2019
test Fix indents in generated docs, and fix generated endpoint typespecs (#… Jun 24, 2019
.formatter.exs Run the generator code through mix format (#829) Dec 8, 2018
.gitignore Only ignore the root synth.metadata file (#1434) Jun 14, 2019 Initial import Sep 1, 2017
LICENSE Initial import Sep 1, 2017 correct name for module (#2573) Aug 30, 2019
mix.lock fix(generator): Version bump from actual hex version (#2283) Aug 14, 2019
package.json Sort global parameters alphabetically when converting (#292) Nov 16, 2018 Fix synth url Jun 14, 2019


This repository contains all the client libraries to interact with Google APIs. These client libraries are created under clients/ and each should contain its own README.

The main folder contains the code necessary to generate these client libraries.

NOTE: These generated clients are under development and should be considered experimental!



All available Google API clients can be found on Add a client to your project's mix.exs under deps:

defmodule YourApplication.Mixfile do
  use Mix.Project

  # Run "mix help deps" to learn about dependencies.
  defp deps do
      {:google_api_storage, "~> 0.0.1"},
      {:goth, "~> 0.6.0"}

Note the goth package, which handles Google Authentication, is also required.

Next, run mix deps.get to pull down the dependencies:

$ mix deps.get

Now you can make an API call by obtaining an access token and using the generated modules.

Obtaining an Access Token

Service Accounts

Authentication is typically done through Application Default Credentials which means you do not have to change the code to authenticate as long as your environment has credentials. Start by creating a Service Account key file. This file can be used to authenticate to Google Cloud Platform services from any environment. To use the file, set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path to the key file, for example:

export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service_account.json

If you are deploying to App Engine, Compute Engine, or Container Engine, your credentials will be available by default.

OAuth 2.0

Many APIs (like Drive, Gmail, and YouTube) require you to use OAuth 2.0 to authorize requests on behalf of an authenticated user. For an example using the oauth2-library, see the auth sample.

We've also provided a mix task to fetch a token for testing. The following command requests a token for the Drive full access scope:

$ mix google_apis.auth
Open the following link in your brower:[some-long-url]
Enter verification code:

Once you've logged in and authorized the application, copy the code param from the web browser's url and paste into the console. The script will then fetch your OAuth access token.

Token: [your-oauth-token]

You can then use this token for your testing:

connection ="your-oauth-token")
{:ok, file_list} = GoogleApi.Drive.V3.Api.Files.drive_files_list(conn)

Making a Request

# Obtain an access token using goth
{:ok, token} = Goth.Token.for_scope("")
conn =

# Call the Storage V1 API (for example) to list buckets
{:ok, response} = GoogleApi.Storage.V1.Api.Buckets.storage_buckets_list(conn, project_id)

# Print the response
Enum.each(response.items, &IO.puts(&

What's Next?

Take a look at our elixir-samples repository repository for examples of calling individual APIs and a getting started tutorial app.

Generating Clients


  1. Install nodejs if not already installed.
  2. Install nodejs dependencies:
$> npm install
  1. Install elixir dependencies:
$> mix deps.get

This project provides 4 mix tasks to componentize the build process:

  1. mix - Select which APIs to build
  2. mix google_apis.fetch - Download the selected API specifications in Google discovery format
  3. mix google_apis.convert - Convert the selected API specifications from Google discovery format to OpenApi v2 (formerly known as Swagger)
  4. mix - Generate API clients

Selecting APIs

The mix task queries Google's API discovery directory. The contents of this file are downloaded to a staging file (api-candidate.json) under the config directory.

You can change the name of the file by providing a filename argument to the mix task:

$> mix foo.json

Note that this task is not one that should be run often, as the config/api.json is considered configuration regarding which APIs to generate.

Fetching API Specifications

The mix google_apis.fetch task iterates through the list of API specifications in the config/api.json file and downloads the specification to the specifications/gdd folder with the format of <name>-<version>.json.

You can limit which APIs to fetch by providing an API name argument to the mix task:

$> mix google_apis.fetch CloudTrace

Converting API Specifications

The next step is to convert the API specifications from Google's discovery format to OpenApi format. The mix google_apis.convert task iterates through the list of API specifications in the config/api.json file and converts each found Google discovery specification to an equivalent* OpenApi version.

You can configure the converter by modifying the config/config.exs setting:

config :google_apis, spec_converter: <some converter implementation>

The default converter uses the node package api-spec-converter. You can also limit which APIs to convert by providing an API name argument to the mix task:

$> mix google_apis.convert CloudTrace

Building API Clients

The mix task iterates through the list of API specifications in the config/api.json file and generates an Elixir client library in the clients folder.

You can configure the converter by modifying the config/config.exs setting:

config :google_apis, client_generator: GoogleApis.Generator.SwaggerCli

The default generator uses Docker and an image based off the swagger-codegen project. You can further configure this converter by modifying the config/config.exs setting:

config :google_apis, swagger_cli_image: "swagger-cli"

You can also limit which APIs to generate by providing an API name argument to the mix task:

$> mix google_apis.generate CloudTrace


Contributions to this library are always welcome and highly encouraged.

See CONTRIBUTING for more information on how to get started.


Apache 2.0 - See LICENSE for more information.


This is not an officially supported Google product.

You can’t perform that action at this time.