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

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Headers

x-program-id
string
required

Identifies the program. Can also be sent as the programId query parameter.

Response

Setup details

success
boolean
Example:

true

data
object