curl --request GET \
--url https://app.rubiehq.com/api/v1/embedded-credential-sessions/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.rubiehq.com/api/v1/embedded-credential-sessions/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.rubiehq.com/api/v1/embedded-credential-sessions/{id}', 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://app.rubiehq.com/api/v1/embedded-credential-sessions/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://app.rubiehq.com/api/v1/embedded-credential-sessions/{id}"
req, _ := http.NewRequest("GET", url, nil)
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.get("https://app.rubiehq.com/api/v1/embedded-credential-sessions/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.rubiehq.com/api/v1/embedded-credential-sessions/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "ecs_MQ",
"status": "pending",
"embed_url": "https://app.rubiehq.com/embed/credential-capture/abc123",
"blueprint_keys": [
"adp-worker-sync",
"gusto-worker-sync"
],
"selected_blueprint_key": null,
"credential_id": null,
"parent_origin": "https://app.example.com",
"expires_at": "2026-08-17T23:00:00.000Z",
"completed_at": null,
"created_at": "2026-08-17T22:45:00.000Z"
}Get embedded credential session
Confirm widget completion and retrieve the selected Blueprint and credential id.
curl --request GET \
--url https://app.rubiehq.com/api/v1/embedded-credential-sessions/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.rubiehq.com/api/v1/embedded-credential-sessions/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.rubiehq.com/api/v1/embedded-credential-sessions/{id}', 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://app.rubiehq.com/api/v1/embedded-credential-sessions/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://app.rubiehq.com/api/v1/embedded-credential-sessions/{id}"
req, _ := http.NewRequest("GET", url, nil)
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.get("https://app.rubiehq.com/api/v1/embedded-credential-sessions/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.rubiehq.com/api/v1/embedded-credential-sessions/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "ecs_MQ",
"status": "pending",
"embed_url": "https://app.rubiehq.com/embed/credential-capture/abc123",
"blueprint_keys": [
"adp-worker-sync",
"gusto-worker-sync"
],
"selected_blueprint_key": null,
"credential_id": null,
"parent_origin": "https://app.example.com",
"expires_at": "2026-08-17T23:00:00.000Z",
"completed_at": null,
"created_at": "2026-08-17T22:45:00.000Z"
}curl --fail-with-body -sS \
"$RUBIE_API_URL/api/v1/embedded-credential-sessions/ecs_..." \
-H "Authorization: Bearer $RUBIE_API_KEY"
Notes
- Only trust
credential_idandselected_blueprint_keyfrom this authenticated response, never from browser input. - Persist both values only when
statusiscompleted. embed_urlisnullafter the session completes or expires.- If the status is non-terminal after a completion event, poll every 2 seconds for a short period.
Authorizations
Your Rubie API key as a bearer token.
Path Parameters
Response
Embedded credential session
Opaque embedded credential session id.
"ecs_MQ"
Lifecycle status of an embedded credential session. completed and expired are terminal. Treat this as an open string set and keep polling on statuses you do not recognise.
pending, completed, expired Exact set of Blueprints displayed in the widget.
1 - 50 elementsExact allowlisted HTTPS origin permitted to frame the widget.
"https://app.example.com"
Origin-bound iframe URL. Present while the session is pending and null after it completes or expires.
Blueprint selected by the end user. Present when status is completed and guaranteed to belong to blueprint_keys.
Vaulted credential id. Present only when status is completed. Retain it against the initiating user and selected Blueprint.
"cred_NDc"