Start 2FA setup
curl --request POST \
--url https://api.next.orenda.finance/v1/auth/mfa/setup \
--header 'Authorization: Bearer <token>' \
--header 'x-program-id: <x-program-id>'import requests
url = "https://api.next.orenda.finance/v1/auth/mfa/setup"
headers = {
"x-program-id": "<x-program-id>",
"Authorization": "Bearer <token>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-program-id': '<x-program-id>', Authorization: 'Bearer <token>'}
};
fetch('https://api.next.orenda.finance/v1/auth/mfa/setup', 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.next.orenda.finance/v1/auth/mfa/setup",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"x-program-id: <x-program-id>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.next.orenda.finance/v1/auth/mfa/setup"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("x-program-id", "<x-program-id>")
req.Header.Add("Authorization", "Bearer <token>")
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.next.orenda.finance/v1/auth/mfa/setup")
.header("x-program-id", "<x-program-id>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.next.orenda.finance/v1/auth/mfa/setup")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-program-id"] = '<x-program-id>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"secret": "JBSWY3DPEHPK3PXP",
"qr_uri": "otpauth://totp/Orenda:ada.lovelace@example.com?secret=JBSWY3DPEHPK3PXP&issuer=Orenda"
}
}{
"success": false,
"code": "INVALID_CREDENTIALS",
"message": "<string>",
"retryable": true
}Password sign-in
Start 2FA setup
Get a secret and QR code for an authenticator app.
POST
/
v1
/
auth
/
mfa
/
setup
Start 2FA setup
curl --request POST \
--url https://api.next.orenda.finance/v1/auth/mfa/setup \
--header 'Authorization: Bearer <token>' \
--header 'x-program-id: <x-program-id>'import requests
url = "https://api.next.orenda.finance/v1/auth/mfa/setup"
headers = {
"x-program-id": "<x-program-id>",
"Authorization": "Bearer <token>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-program-id': '<x-program-id>', Authorization: 'Bearer <token>'}
};
fetch('https://api.next.orenda.finance/v1/auth/mfa/setup', 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.next.orenda.finance/v1/auth/mfa/setup",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"x-program-id: <x-program-id>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.next.orenda.finance/v1/auth/mfa/setup"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("x-program-id", "<x-program-id>")
req.Header.Add("Authorization", "Bearer <token>")
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.next.orenda.finance/v1/auth/mfa/setup")
.header("x-program-id", "<x-program-id>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.next.orenda.finance/v1/auth/mfa/setup")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-program-id"] = '<x-program-id>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"secret": "JBSWY3DPEHPK3PXP",
"qr_uri": "otpauth://totp/Orenda:ada.lovelace@example.com?secret=JBSWY3DPEHPK3PXP&issuer=Orenda"
}
}{
"success": false,
"code": "INVALID_CREDENTIALS",
"message": "<string>",
"retryable": true
}For a user who is already signed in and wants to add 2FA to their account. (During
first-time registration, use security setup instead —
same idea, but driven by a
session_token rather than a bearer token.)
The first of two steps. You get back a secret and a qr_uri. Show the QR code so the user
can add it to their authenticator app, then confirm the setup
with the first code the app shows.
This call needs the user’s bearer token.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Identifies the program. Can also be sent as the programId query parameter.
⌘I