Akeneo API client

This is an Akeneo PIM API client for Elixir. You'll need an API token which can be retrieved by following the getting started guide. In order to get an overview of the available endpoints, look up the API reference.

Installation

The package can be installed by adding akeneo_api to your list of dependencies in mix.exs:

def deps do
  [
    {:akeneo_api, "~> 0.1.0"}
  ]
end

Configuration

Start by adding the credentials and connection parameters for akeneo_api to your config/config.exs:

config :akeneo_api,
    username: "USERNAME_HERE",
    password: "PASSWORD_HERE",
    client_id: "TOKEN_CLIENT_ID",
    secret: "TOKEN_SECRET",
    host: "https://AKENEO_INSTALLATION.tld",
    token_url: "https://AKENEO_INSTALLATION.tld/api/oauth/v1/token"

If you want to see what's going on behind the scenes, enable the debug mode of the oauth2 module:

config :oauth2, debug: true

Usage

This module uses the Swagger JSON provided by Akeneo to build modules and functions on compile time. Every endpoint lives under the namespace AkeneoApi.Endpoint.V1 such as:

iex(1)> AkeneoApi.Endpoint.V1.
AssetCategories                AssetTags                      
Assets                         AssociationTypes               
AttributeGroups                Attributes                     
Categories                     Channels                       
Currencies                     Families                       
Locales                        MeasureFamilies                
MediaFiles                     ProductModels                  
Products                       PublishedProducts              
ReferenceEntities              ReferenceEntitiesMediaFiles

Within this code-generation, every operationId of the Swagger specification becomes its own function, while each parameter within the URL-path becomes a mandatory argument of this function. The generated function's last parameter is an optional Keyword List, transporting query: and body: parameters.

Simple example

Get a list of products:

{:ok, product_list} = AkeneoApi.Endpoint.V1.Products.get_products

Query example

Get a list of products filtered by name:

filter = %{name: [%{operator: "CONTAINS", value: "test", locale: "de_DE", scope: "ecommerce"}]}
{:ok, product_list} = AkeneoApi.Endpoint.V1.Products.get_products(query: [limit: 100, page: 2, search: Jason.encode!(filter)])

Refer to the API reference as well as the filter documentation to further details.

File example

file = "/path/to/file

product = Jason.encode!(%{
  identifier: "product123",
  attribute: "image",
  scope: nil,
  locale: nil
})

body = {:multipart, [
  {"product", product},
  {:file, file}
]}

AkeneoApi.Endpoint.V1.MediaFiles.post_media_files(body: body)