OAuth 2.0 token
curl --request POST \
--url https://account.sendcloud.com/oauth2/token \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data 'grant_type=<string>' \
--data 'client_id=<string>' \
--data 'code=<string>' \
--data 'redirect_uri=<string>' \
--data 'refresh_token=<string>'import requests
url = "https://account.sendcloud.com/oauth2/token"
payload = {
"grant_type": "<string>",
"client_id": "<string>",
"code": "<string>",
"redirect_uri": "<string>",
"refresh_token": "<string>"
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/x-www-form-urlencoded"
}
response = requests.post(url, data=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Basic <encoded-value>',
'Content-Type': 'application/x-www-form-urlencoded'
},
body: new URLSearchParams({
grant_type: '<string>',
client_id: '<string>',
code: '<string>',
redirect_uri: '<string>',
refresh_token: '<string>'
})
};
fetch('https://account.sendcloud.com/oauth2/token', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://account.sendcloud.com/oauth2/token",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "grant_type=%3Cstring%3E&client_id=%3Cstring%3E&code=%3Cstring%3E&redirect_uri=%3Cstring%3E&refresh_token=%3Cstring%3E",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/x-www-form-urlencoded"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://account.sendcloud.com/oauth2/token"
payload := strings.NewReader("grant_type=%3Cstring%3E&client_id=%3Cstring%3E&code=%3Cstring%3E&redirect_uri=%3Cstring%3E&refresh_token=%3Cstring%3E")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://account.sendcloud.com/oauth2/token")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/x-www-form-urlencoded")
.body("grant_type=%3Cstring%3E&client_id=%3Cstring%3E&code=%3Cstring%3E&redirect_uri=%3Cstring%3E&refresh_token=%3Cstring%3E")
.asString();require 'uri'
require 'net/http'
url = URI("https://account.sendcloud.com/oauth2/token")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/x-www-form-urlencoded'
request.body = "grant_type=%3Cstring%3E&client_id=%3Cstring%3E&code=%3Cstring%3E&redirect_uri=%3Cstring%3E&refresh_token=%3Cstring%3E"
response = http.request(request)
puts response.read_body{
"access_token": "<string>",
"expires_in": 123,
"id_token": "<string>",
"refresh_token": "<string>",
"scope": "<string>",
"token_type": "<string>"
}{
"error": "<string>",
"error_debug": "<string>",
"error_description": "<string>",
"error_hint": "The redirect URL is not allowed.",
"status_code": 401
}Auth API
OAuth 2.0 token
Use this endpoint to get a new OAuth 2.0 access token.
POST
/
oauth2
/
token
OAuth 2.0 token
curl --request POST \
--url https://account.sendcloud.com/oauth2/token \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data 'grant_type=<string>' \
--data 'client_id=<string>' \
--data 'code=<string>' \
--data 'redirect_uri=<string>' \
--data 'refresh_token=<string>'import requests
url = "https://account.sendcloud.com/oauth2/token"
payload = {
"grant_type": "<string>",
"client_id": "<string>",
"code": "<string>",
"redirect_uri": "<string>",
"refresh_token": "<string>"
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/x-www-form-urlencoded"
}
response = requests.post(url, data=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Basic <encoded-value>',
'Content-Type': 'application/x-www-form-urlencoded'
},
body: new URLSearchParams({
grant_type: '<string>',
client_id: '<string>',
code: '<string>',
redirect_uri: '<string>',
refresh_token: '<string>'
})
};
fetch('https://account.sendcloud.com/oauth2/token', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://account.sendcloud.com/oauth2/token",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "grant_type=%3Cstring%3E&client_id=%3Cstring%3E&code=%3Cstring%3E&redirect_uri=%3Cstring%3E&refresh_token=%3Cstring%3E",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/x-www-form-urlencoded"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://account.sendcloud.com/oauth2/token"
payload := strings.NewReader("grant_type=%3Cstring%3E&client_id=%3Cstring%3E&code=%3Cstring%3E&redirect_uri=%3Cstring%3E&refresh_token=%3Cstring%3E")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://account.sendcloud.com/oauth2/token")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/x-www-form-urlencoded")
.body("grant_type=%3Cstring%3E&client_id=%3Cstring%3E&code=%3Cstring%3E&redirect_uri=%3Cstring%3E&refresh_token=%3Cstring%3E")
.asString();require 'uri'
require 'net/http'
url = URI("https://account.sendcloud.com/oauth2/token")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/x-www-form-urlencoded'
request.body = "grant_type=%3Cstring%3E&client_id=%3Cstring%3E&code=%3Cstring%3E&redirect_uri=%3Cstring%3E&refresh_token=%3Cstring%3E"
response = http.request(request)
puts response.read_body{
"access_token": "<string>",
"expires_in": 123,
"id_token": "<string>",
"refresh_token": "<string>",
"scope": "<string>",
"token_type": "<string>"
}{
"error": "<string>",
"error_debug": "<string>",
"error_description": "<string>",
"error_hint": "The redirect URL is not allowed.",
"status_code": 401
}API v2 is entering maintenance mode. New users should start with API v3 to access our latest features and improved performance. Already using v2? Don’t worry, your current integration remains fully functional. Read more about maintenance mode, or check out the migration guide for API v3.
OAuth 2.0 authentication is currently available as a beta feature for a limited number of clients. Following this beta phase, we are planning a gradual rollout of the OAuth2 authentication feature to all users. Our aim is to ensure a smooth transition and to continue providing an optimal user experience throughout the process.
Authorizations
basicoauth2
Basic authentication header of the form Basic <encoded-value>, where <encoded-value> is the base64-encoded string username:password.
Body
application/x-www-form-urlencoded
Response
OAuth2TokenExchange
OAuth2 Token Exchange Result
The access token issued by the authorization server.
The lifetime in seconds of the access token. For example, the value "3600" denotes that the access token will expire in one hour from the time the response was generated.
To retrieve a refresh token request the id_token scope.
The refresh token, which can be used to obtain new access tokens. To retrieve it add the scope "offline" to your access token request.
The scope of the access token
The type of the token issued