import { Crevio } from "@crevio/sdk";
const crevio = new Crevio({
apiKey: process.env["CREVIO_API_KEY"] ?? "",
});
async function run() {
const result = await crevio.connections.connect({
toolkit: "<value>",
});
console.log(result);
}
run();curl --request POST \
--url https://api.crevio.co/v1/connections/connect \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"toolkit": "<string>",
"callback_url": "<string>",
"scope": "account"
}
'import requests
url = "https://api.crevio.co/v1/connections/connect"
payload = {
"toolkit": "<string>",
"callback_url": "<string>",
"scope": "account"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({toolkit: '<string>', callback_url: '<string>', scope: 'account'})
};
fetch('https://api.crevio.co/v1/connections/connect', 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://api.crevio.co/v1/connections/connect",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'toolkit' => '<string>',
'callback_url' => '<string>',
'scope' => 'account'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$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://api.crevio.co/v1/connections/connect"
payload := strings.NewReader("{\n \"toolkit\": \"<string>\",\n \"callback_url\": \"<string>\",\n \"scope\": \"account\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.crevio.co/v1/connections/connect")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"toolkit\": \"<string>\",\n \"callback_url\": \"<string>\",\n \"scope\": \"account\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.crevio.co/v1/connections/connect")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"toolkit\": \"<string>\",\n \"callback_url\": \"<string>\",\n \"scope\": \"account\"\n}"
response = http.request(request)
puts response.read_body{
"object": "connection_link",
"status": "INITIATED",
"toolkit": "<string>",
"redirect_url": "<string>",
"external_account_id": "<string>",
"expires_at": "<string>",
"setup_fields": [
{
"name": "<string>",
"optional": true,
"label": "<string>",
"description": "<string>"
}
]
}{
"error": {
"type": "invalid_request_error",
"code": "bad_request",
"message": "The request was malformed or contained invalid parameters"
}
}{
"error": {
"type": "invalid_request_error",
"code": "authentication_required",
"message": "You did not provide an API key."
}
}{
"error": {
"type": "invalid_request_error",
"code": "forbidden",
"message": "You do not have permission to perform this action"
}
}{
"error": {
"type": "validation_error",
"code": "validation_failed",
"message": "Email is required",
"errors": {
"email": [
"can't be blank"
]
}
}
}{
"error": {
"type": "invalid_request_error",
"code": "rate_limit_exceeded",
"message": "Too many requests. Please retry later."
}
}{
"error": {
"type": "api_error",
"code": "internal_error",
"message": "An unexpected error occurred"
}
}{
"error": {
"type": "api_error",
"message": "<string>",
"code": "<string>",
"param": "<string>",
"errors": {},
"doc_url": "<string>"
}
}Start a connection
Mint a hosted OAuth link to connect an app; send the user to redirect_url. Some apps need setup first (see setup_fields). On return the connection appears in GET /connections.
import { Crevio } from "@crevio/sdk";
const crevio = new Crevio({
apiKey: process.env["CREVIO_API_KEY"] ?? "",
});
async function run() {
const result = await crevio.connections.connect({
toolkit: "<value>",
});
console.log(result);
}
run();curl --request POST \
--url https://api.crevio.co/v1/connections/connect \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"toolkit": "<string>",
"callback_url": "<string>",
"scope": "account"
}
'import requests
url = "https://api.crevio.co/v1/connections/connect"
payload = {
"toolkit": "<string>",
"callback_url": "<string>",
"scope": "account"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({toolkit: '<string>', callback_url: '<string>', scope: 'account'})
};
fetch('https://api.crevio.co/v1/connections/connect', 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://api.crevio.co/v1/connections/connect",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'toolkit' => '<string>',
'callback_url' => '<string>',
'scope' => 'account'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$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://api.crevio.co/v1/connections/connect"
payload := strings.NewReader("{\n \"toolkit\": \"<string>\",\n \"callback_url\": \"<string>\",\n \"scope\": \"account\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.crevio.co/v1/connections/connect")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"toolkit\": \"<string>\",\n \"callback_url\": \"<string>\",\n \"scope\": \"account\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.crevio.co/v1/connections/connect")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"toolkit\": \"<string>\",\n \"callback_url\": \"<string>\",\n \"scope\": \"account\"\n}"
response = http.request(request)
puts response.read_body{
"object": "connection_link",
"status": "INITIATED",
"toolkit": "<string>",
"redirect_url": "<string>",
"external_account_id": "<string>",
"expires_at": "<string>",
"setup_fields": [
{
"name": "<string>",
"optional": true,
"label": "<string>",
"description": "<string>"
}
]
}{
"error": {
"type": "invalid_request_error",
"code": "bad_request",
"message": "The request was malformed or contained invalid parameters"
}
}{
"error": {
"type": "invalid_request_error",
"code": "authentication_required",
"message": "You did not provide an API key."
}
}{
"error": {
"type": "invalid_request_error",
"code": "forbidden",
"message": "You do not have permission to perform this action"
}
}{
"error": {
"type": "validation_error",
"code": "validation_failed",
"message": "Email is required",
"errors": {
"email": [
"can't be blank"
]
}
}
}{
"error": {
"type": "invalid_request_error",
"code": "rate_limit_exceeded",
"message": "Too many requests. Please retry later."
}
}{
"error": {
"type": "api_error",
"code": "internal_error",
"message": "An unexpected error occurred"
}
}{
"error": {
"type": "api_error",
"message": "<string>",
"code": "<string>",
"param": "<string>",
"errors": {},
"doc_url": "<string>"
}
}Authorizations
API key in the format: Bearer {api_token}
Headers
Makes this write safe to retry: a repeat with the same key replays the first response instead of creating a second resource. Scoped to the account, remembered for 24 hours; reusing a key with a different payload is an error.
255Body
App slug from the catalog (e.g. gmail)
Where to return the user after auth
Who owns the resulting connection. account (default) shares it with the whole workspace; user makes it personal to the authenticated user and invisible to teammates.
account, user Response
Success
connection_link INITIATED Hosted OAuth URL to send the user to
Fields the connect page asks the user for besides the OAuth login (e.g. Shopify's shop ID and the client ID/secret of a custom app they must create first, with the redirect URI to register). Empty for plain OAuth apps. Walk the user through these before sending them to redirect_url.
Show child attributes
Show child attributes
Was this page helpful?

