Create Vault Integration
curl --request POST \
--url https://api.example.com/vault-integrations \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"type": "<string>",
"config": {
"config.address": "<string>",
"config.namespace": "<string>",
"config.authMethod": "<string>",
"config.roleId": "<string>",
"config.secretId": "<string>"
}
}
'import requests
url = "https://api.example.com/vault-integrations"
payload = {
"name": "<string>",
"type": "<string>",
"config": {
"config.address": "<string>",
"config.namespace": "<string>",
"config.authMethod": "<string>",
"config.roleId": "<string>",
"config.secretId": "<string>"
}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
type: '<string>',
config: {
'config.address': '<string>',
'config.namespace': '<string>',
'config.authMethod': '<string>',
'config.roleId': '<string>',
'config.secretId': '<string>'
}
})
};
fetch('https://api.example.com/vault-integrations', 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.example.com/vault-integrations",
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([
'name' => '<string>',
'type' => '<string>',
'config' => [
'config.address' => '<string>',
'config.namespace' => '<string>',
'config.authMethod' => '<string>',
'config.roleId' => '<string>',
'config.secretId' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"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.example.com/vault-integrations"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"config\": {\n \"config.address\": \"<string>\",\n \"config.namespace\": \"<string>\",\n \"config.authMethod\": \"<string>\",\n \"config.roleId\": \"<string>\",\n \"config.secretId\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
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.example.com/vault-integrations")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"config\": {\n \"config.address\": \"<string>\",\n \"config.namespace\": \"<string>\",\n \"config.authMethod\": \"<string>\",\n \"config.roleId\": \"<string>\",\n \"config.secretId\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/vault-integrations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"config\": {\n \"config.address\": \"<string>\",\n \"config.namespace\": \"<string>\",\n \"config.authMethod\": \"<string>\",\n \"config.roleId\": \"<string>\",\n \"config.secretId\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"type": "<string>",
"address": "<string>",
"namespace": "<string>",
"authMethod": "<string>",
"roleId": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>"
}Credentials & Vault
Create Vault Integration
Register a HashiCorp Vault / OpenBao integration that later credential records can read secrets from.
POST
/
vault-integrations
Create Vault Integration
curl --request POST \
--url https://api.example.com/vault-integrations \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"type": "<string>",
"config": {
"config.address": "<string>",
"config.namespace": "<string>",
"config.authMethod": "<string>",
"config.roleId": "<string>",
"config.secretId": "<string>"
}
}
'import requests
url = "https://api.example.com/vault-integrations"
payload = {
"name": "<string>",
"type": "<string>",
"config": {
"config.address": "<string>",
"config.namespace": "<string>",
"config.authMethod": "<string>",
"config.roleId": "<string>",
"config.secretId": "<string>"
}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
type: '<string>',
config: {
'config.address': '<string>',
'config.namespace': '<string>',
'config.authMethod': '<string>',
'config.roleId': '<string>',
'config.secretId': '<string>'
}
})
};
fetch('https://api.example.com/vault-integrations', 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.example.com/vault-integrations",
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([
'name' => '<string>',
'type' => '<string>',
'config' => [
'config.address' => '<string>',
'config.namespace' => '<string>',
'config.authMethod' => '<string>',
'config.roleId' => '<string>',
'config.secretId' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"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.example.com/vault-integrations"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"config\": {\n \"config.address\": \"<string>\",\n \"config.namespace\": \"<string>\",\n \"config.authMethod\": \"<string>\",\n \"config.roleId\": \"<string>\",\n \"config.secretId\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
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.example.com/vault-integrations")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"config\": {\n \"config.address\": \"<string>\",\n \"config.namespace\": \"<string>\",\n \"config.authMethod\": \"<string>\",\n \"config.roleId\": \"<string>\",\n \"config.secretId\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/vault-integrations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"config\": {\n \"config.address\": \"<string>\",\n \"config.namespace\": \"<string>\",\n \"config.authMethod\": \"<string>\",\n \"config.roleId\": \"<string>\",\n \"config.secretId\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"type": "<string>",
"address": "<string>",
"namespace": "<string>",
"authMethod": "<string>",
"roleId": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>"
}Overview
Registers an external secret-manager integration. v1 supports HashiCorp Vault (OSS, Enterprise, and OpenBao) via AppRole authentication. ScrapEngine never stores the raw username/password — instead, you point credentials at this integration and a vault path, and the authenticate task action reads the secret on demand using the registered AppRole. Thesecret_id is stored encrypted at rest.
Body
string
required
Human-readable name. 1-100 characters.
string
required
Backend type. Must be
hashicorp (only value supported in v1).object
required
HashiCorp-specific configuration.
Show config properties
Show config properties
Example Request
curl -X POST "https://api.scrapengine.io/api/v1/vault-integrations" \
-H "Authorization: Bearer $SCRAPENGINE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "prod-vault",
"type": "hashicorp",
"config": {
"address": "https://vault.prod.example.com:8200",
"namespace": "admin/scrapengine",
"authMethod": "approle",
"roleId": "8f2e1c0c-0e4a-4b58-8b2e-4a9e1c8a4a11",
"secretId": "s.xxxxxxxxxxxxxxxxxxxxxxxx"
}
}'
const response = await fetch(
"https://api.scrapengine.io/api/v1/vault-integrations",
{
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.SCRAPENGINE_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "prod-vault",
type: "hashicorp",
config: {
address: "https://vault.prod.example.com:8200",
authMethod: "approle",
roleId: process.env.VAULT_ROLE_ID,
secretId: process.env.VAULT_SECRET_ID,
},
}),
},
);
const data = await response.json();
Response
Success Response (201)
string
Integration ID (UUID). Reference from credential records.
string
The name you provided.
string
Always
hashicorp in v1.string
Vault address.
string
Vault Enterprise namespace, or
null if unset.string
Always
approle in v1.string
AppRole role_id (echoed back;
secret_id is never returned).string
ISO 8601 timestamp.
string
ISO 8601 timestamp.
{
"id": "5f8c6a74-5f2e-4f5a-9e58-5b9c3c7d2a11",
"name": "prod-vault",
"type": "hashicorp",
"address": "https://vault.prod.example.com:8200",
"namespace": "admin/scrapengine",
"authMethod": "approle",
"roleId": "8f2e1c0c-0e4a-4b58-8b2e-4a9e1c8a4a11",
"createdAt": "2026-04-24T09:12:44Z",
"updatedAt": "2026-04-24T09:12:44Z"
}
Error Responses
| Status | Description |
|---|---|
400 | Invalid body — missing required fields, bad URL, or unsupported type / authMethod. |
401 | Unauthorized — invalid or missing API key. |
Was this page helpful?
⌘I