Links
Comment on page

Basic Auth

A guide on how to use Basic Auth for authenticating our REST API.

Overview

Basic Auth is supported in most request libraries and is often as simple as adding a username- and password parameter. To get you up and running quickly, we present a few language-specific methods by fetching a list of projects available from the REST API using a Service Account for access control.

Prerequisites

  • Service Account Credentials A Service Account must be created with a membership in the target project. Any role will suffice.

Code Sample

Add the following environment variables as they will be used to authenticate the API. Replace the values of the form <VARIABLE> with your own details.
export DT_SERVICE_ACCOUNT_KEY_ID=<YOUR_SERVICE_ACCOUNT_KEY_ID>
export DT_SERVICE_ACCOUNT_SECRET=<YOUR_SERVICE_ACCOUNT_SECRET>
Create and enter a new directory that will contain the example project.
Python 3.11
Node.js 20
Go 1.20
cURL
Install the necessary dependencies.
requests==2.31.0
Create a file main.py with the following content.
import os
import requests
if __name__ == '__main__':
projects = requests.get(
url='https://api.d21s.com/v2/projects',
auth=(
os.environ.get('DT_SERVICE_ACCOUNT_KEY_ID'),
os.environ.get('DT_SERVICE_ACCOUNT_SECRET'),
)
)
print(projects.json())
Install the necessary dependencies.
npm install [email protected]
Create a file index.js with the following content.
const axios = require('axios').default;
async function main() {
const response = await axios({
method: 'GET',
url: 'https://api.disruptive-technologies.com/v2/projects',
auth: {
username: process.env.DT_SERVICE_ACCOUNT_KEY_ID,
password: process.env.DT_SERVICE_ACCOUNT_SECRET,
}
})
console.log(JSON.stringify(response.data, null, 2))
}
main()
Initialize a new Go project.
go mod init example
Create a file main.go with the following content.
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"os"
"time"
)
func main() {
// Construct endpoint URL for listing devices in project.
deviceListUrl := "https://api.d21s.com/v2/projects"
// Create a custom http Client with timeout.
client := &http.Client{Timeout: time.Second * 3}
// Create the request object with method, URL, but no optional body.
req, err := http.NewRequest("GET", deviceListUrl, nil)
if err != nil {
log.Fatal(err)
}
// Set the request's Authorization header to use HTTP Basic Authentication.
req.SetBasicAuth(
os.Getenv("DT_SERVICE_ACCOUNT_KEY_ID"),
os.Getenv("DT_SERVICE_ACCOUNT_SECRET"),
)
// Send an HTTP request and return an HTTP response.
response, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer response.Body.Close()
// Convert response body to map.
var body map[string]interface{}
if err = json.NewDecoder(response.Body).Decode(&body); err != nil {
log.Fatal(err)
}
// Pretty print the response body.
prettyBody, _ := json.MarshalIndent(body, "", " ")
fmt.Println(string(prettyBody))
}
curl -X GET "https://api.disruptive-technologies.com/v2/projects" \
-H "accept: application/json" \
-u $DT_SERVICE_ACCOUNT_KEY_ID:$DT_SERVICE_ACCOUNT_SECRET
Running the file should list all projects available to the Service Account.
While this example sends a GET request to the API that lists all available projects, the request URL can be replaced with any call in our REST API Reference.
Last modified 27d ago