/oauth/tokenYou will need to request new access token on the beginning and in rare cases when access token renewal with refresh token fails. Refresh token is always returned with each new or refreshed access token and you need to store it for future access token renewals.
You can request new access token if you have datamolino login/password, client_id and client_secret (resource owner password credentials grant) or when you have access code, client_id and client_secret (access code grant). Access token will be valid 2 hours since creation.
For more info please see OAuth 2.0 official protocol specification or contact our support.
Known pitfalls
In case you get response code 400 (bad request) on /oauth/token POST requests where you are posting json in the request body please check the validity of the json. For example forgotten comma after the last json key will cause the request to fail.
Headers
| Name | Example | Description |
|---|---|---|
Content-Type |
application/json | — |
Request body
{
"client_id": "demo_client_id",
"client_secret": "demo_client_secret",
"username": "integrator@example.com",
"password": "demo_password",
"grant_type": "password"
}Code examples
curl --request POST 'https://app.datamolino.com/oauth/token' \
--header 'Content-Type: application/json' \
--data '{
"client_id": "demo_client_id",
"client_secret": "demo_client_secret",
"username": "integrator@example.com",
"password": "demo_password",
"grant_type": "password"
}'POST /oauth/token HTTP/1.1
Host: app.datamolino.com
Content-Type: application/json
{
"client_id": "demo_client_id",
"client_secret": "demo_client_secret",
"username": "integrator@example.com",
"password": "demo_password",
"grant_type": "password"
}const response = await fetch("https://app.datamolino.com/oauth/token", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
"client_id": "demo_client_id",
"client_secret": "demo_client_secret",
"username": "integrator@example.com",
"password": "demo_password",
"grant_type": "password"
}),
});
const data = await response.json();import axios from "axios";
const response = await axios({
method: "post",
url: "https://app.datamolino.com/oauth/token",
headers: {
"Content-Type": "application/json"
},
data: {
"client_id": "demo_client_id",
"client_secret": "demo_client_secret",
"username": "integrator@example.com",
"password": "demo_password",
"grant_type": "password"
}
});
console.log(response.data);import requests
url = "https://app.datamolino.com/oauth/token"
headers = {
"Content-Type": "application/json"
}
payload = {
"client_id": "demo_client_id",
"client_secret": "demo_client_secret",
"username": "integrator@example.com",
"password": "demo_password",
"grant_type": "password"
}
response = requests.request("POST", url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())require 'json'
require 'net/http'
uri = URI("https://app.datamolino.com/oauth/token")
request = Net::HTTP::Post.new(uri)
request["Content-Type"] = "application/json"
request.body = <<~JSON
{
"client_id": "demo_client_id",
"client_secret": "demo_client_secret",
"username": "integrator@example.com",
"password": "demo_password",
"grant_type": "password"
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(request)
end
puts JSON.parse(response.body)# app/services/datamolino_client.rb
require 'json'
require 'net/http'
class DatamolinoClient
BASE_URL = "https://app.datamolino.com"
def initialize(access_token: Rails.application.credentials.dig(:datamolino, :access_token))
@access_token = access_token
end
def request_access_token
uri = URI("#{BASE_URL}/oauth/token")
request = Net::HTTP::Post.new(uri)
request["Content-Type"] = "application/json"
request.body = <<~JSON
{
"client_id": "demo_client_id",
"client_secret": "demo_client_secret",
"username": "integrator@example.com",
"password": "demo_password",
"grant_type": "password"
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
JSON.parse(response.body)
end
end<?php
use GuzzleHttp\Client;
$client = new Client();
$response = $client->request('POST', 'https://app.datamolino.com/oauth/token', [
'headers' => json_decode('{"Content-Type":"application/json"}', true),
'json' => json_decode('{"client_id":"demo_client_id","client_secret":"demo_client_secret","username":"integrator@example.com","password":"demo_password","grant_type":"password"}', true)
]);
echo $response->getBody();OkHttpClient client = new OkHttpClient();
RequestBody body = RequestBody.create("{\n \"client_id\": \"demo_client_id\",\n \"client_secret\": \"demo_client_secret\",\n \"username\": \"integrator@example.com\",\n \"password\": \"demo_password\",\n \"grant_type\": \"password\"\n}", MediaType.parse("application/json"));
Request request = new Request.Builder()
.url("https://app.datamolino.com/oauth/token")
.addHeader("Content-Type", "application/json")
.method("POST", body)
.build();
Response response = client.newCall(request).execute();using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://app.datamolino.com/oauth/token");
request.Content = new StringContent("{\n \"client_id\": \"demo_client_id\",\n \"client_secret\": \"demo_client_secret\",\n \"username\": \"integrator@example.com\",\n \"password\": \"demo_password\",\n \"grant_type\": \"password\"\n}", Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());client := &http.Client{}
req, err := http.NewRequest("POST", "https://app.datamolino.com/oauth/token", strings.NewReader("{\n \"client_id\": \"demo_client_id\",\n \"client_secret\": \"demo_client_secret\",\n \"username\": \"integrator@example.com\",\n \"password\": \"demo_password\",\n \"grant_type\": \"password\"\n}"))
if err != nil { panic(err) }
req.Header.Add("Content-Type", "application/json")
res, err := client.Do(req)
if err != nil { panic(err) }
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil { panic(err) }
fmt.Println(string(body))import Foundation
var request = URLRequest(url: URL(string: "https://app.datamolino.com/oauth/token")!)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = "{\n \"client_id\": \"demo_client_id\",\n \"client_secret\": \"demo_client_secret\",\n \"username\": \"integrator@example.com\",\n \"password\": \"demo_password\",\n \"grant_type\": \"password\"\n}".data(using: .utf8)
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)Responses
200 OK
Content type: application/json; charset=utf-8
{
"access_token": "demo_access_token",
"token_type": "bearer",
"expires_in": 7200,
"refresh_token": "demo_refresh_token",
"created_at": 1571911582
}