Skip to content

CHILI GraFx Integration

Empower Your Custom Solutions

Introduction

This guide will walk you through the process of defining an integration within the CHILI GraFx platform, obtaining the necessary credentials, and creating a token for seamless API communication. Integrating with CHILI GraFx enables you to leverage Smart Templates and customize the functionality of your applications. Let's get started!

Step 1: Accessing the CHILI GraFx Platform

Log in to your CHILI GraFx platform account using your provided credentials.

Step 2: Creating a New Integration

Navigate to Environments and click the pencil icon, right of the Environment.

screen

Add a new Integration

screen

Click the "Create Integration" button.

screen

Provide a meaningful name and description for your integration to easily identify it later.

Click "Create Integration" to finish.

Edit an existing Integration

Click an existing integration to edit its details.

screenshot

Step 3: Obtaining Integration Credentials

After saving the integration configuration, click on the integration name, to see the details panel.

When looking at the details for your integration, you will notice that there are two tabs.

The General Tab

The General tab contains the information about your integration and the authentication credentials.

The CHILI GraFx platform will generate a set of credentials specifically for this integration.

These credentials include a Client ID and Client Secret. Make sure to securely store these credentials, as they we will use this information to generate our "access token" which we will then use to authorize our API requests.

screenshot

Your Environment Swagger

At the bottom of the General tab you will notice that there are links to the Environment API and Platform API Swagger pages for your environment that you can interactively test endpoints with after generating an access token

The Permissions tab

The Permissions tab is where you can control the level of access your integration has to your environment. Permissions are presented as API scopes, and will determine the access your integration has on the environment.

screenshot

Step 4: Generating an Access Token

Now we can request an access token using our Client ID and Client Secret. This token will serve as your application's authorization for subsequent API calls.

grafx token generation workflow

To get an access token we simply make a POST request to our auth server located at https://integration-login.chiligrafx.com/oauth/token and provide a couple fields. If all goes as intended, you will receive an access_token in your response.

Here are some examples for making this request

curl --location \
--request POST 'https://integration-login.chiligrafx.com/oauth/token' \
--header 'content-type: application/x-www-form-urlencoded' \
--data-urlencode 'audience=https://chiligrafx.com' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_id=<CLIENT_ID>' \
--data-urlencode 'client_secret=<CLIENT_SECRET>'
import requests

endpoint = 'https://integration-login.chiligrafx.com/oauth/token'
client_id = '<YOUR CLIENT ID>'
client_secret = '<YOUR CLIENT SECRET>'

resp = requests.post(
    url=endpoint,
    headers={
        "content-type": "application/json"
    },
    json={
        "grant_type": "client_credentials",
        "audience": "https://chiligrafx.com",
        "client_id": client_id,
        "client_secret": client_secret,
    }
)

if resp.status_code == 200:
    print(resp.json()["access_token"])
else:
    raise Exception(f"{resp.text}")
const client_id = '<YOUR CLIENT ID>'
const client_secret = '<YOUR CLIENT SECRET>'

fetch('https://integration-login.chiligrafx.com/oauth/token', {
method: "POST",
headers: {
    'Content-Type': 'application/json'
},
body: JSON.stringify({
    'grant_type': 'client_credentials',
    'audience': 'https://chiligrafx.com',
    'client_id': client_id,
    'client_secret': client_id
})
})
.then(response => response.json()
.then(data => console.log(data)))
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

type AuthResponse struct {
    Token       string  `json:"access_token"`
    Expiration  int     `json:"expires_in"`
    Type        string  `json:"token_type"`
    Scope       string  `json:"scope"`
}

func main() {
    posturl := "https://integration-login.chiligrafx.com/oauth/token"

    body := []byte(`{
        "grant_type": "client_credentials",
        "audience": "https://chiligrafx.com",
        "client_id": "<YOUR CLIENT ID>",
        "client_secret": "<YOUR CLIENT SECRET>"
    }`)

    r, err := http.NewRequest("POST", posturl, bytes.NewBuffer(body))
    if err != nil {
        panic(err)
    }

    r.Header.Add("Content-Type", "application/json")

    client := &http.Client{}
    res, err := client.Do(r)
    if err != nil {
        panic(err)
    }

    defer res.Body.Close()

    response := &AuthResponse{}
    derr := json.NewDecoder(res.Body).Decode(response)
    if derr != nil {
        panic(derr)
    }

    if res.StatusCode != 200 {
        panic(res.Status)
    }

    fmt.Println("Token:", response.Token)
}
// This expects a ResponseType class to be defined with the response JSON properties
// `access_token`, `expires_in`, `scope`, and `token_type`
Map<String, Object> body = new HashMap<>();
body.put("grant_type", "client_credentials");
body.put("audience", "https://chiligrafx.com");
body.put("client_id", client_id);
body.put("client_secret", client_id);

BodyBuilder requestBuilder;

try {
  requestBuilder = RequestEntity.method(HttpMethod.POST, new URI("https://integration-login.chiligrafx.com/oauth/token"));
} catch (URISyntaxException e) {
  log.error("Invalid URI: {}", url);
  log.error(e);
  throw new InvalidRequestException("Invalid URL");
}

requestBuilder.contentType(MediaType.APPLICATION_JSON);
RequestEntity<Object> requestEntity = requestBuilder.body(body);

ResponseEntity<ResponseType> responseEntity = restTemplate.exchange(
  requestEntity,
  new ParameterizedTypeReference<ResponseType>() {}
);
if (!responseEntity.getStatusCode().is2xxSuccessful()) {
  // The error handler built into the RestTemplate should handle 400 and 500 series errors.
  throw new RestClientException(
    "API returned " + responseEntity.getStatusCode()
  );
}

log.info("Got response: {}", responseEntity.getBody());

This call is best done server-side to not expose the client_id and certainly not the client_secret in the browser. You can pass the resulting access token to your front-end

Extract the access token from the authentication response and securely store it within your application.

The access token is issued with an expiration offset. You can find this in the expires_in JSON property of the response. Ensure your application refreshes it's token when necessary. You simply repeat the process generate a new token.

Step 6: Making API Calls

With the access token in hand, you can now include it in the headers of your API requests to the CHILI GraFx platform. Authorization: Bearer <YOUR ACCESS TOKEN>

Refer to the Developer documentation to explore the available endpoints, request parameters, and response formats.

Leverage the API calls to interact with the CHILI GraFx platform, perform operations such as creating, updating, or retrieving resources, and integrate its capabilities seamlessly into your custom solution.

You can use you access token to authorize and test calls in your swagger