curl --request POST \
--url https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-borrow/transactions/{transactionId}/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"signedPayload": "0x1234567890abcdef...",
"transactionHash": "0xabcdef1234567890..."
}
'import requests
url = "https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-borrow/transactions/{transactionId}/submit"
payload = {
"signedPayload": "0x1234567890abcdef...",
"transactionHash": "0xabcdef1234567890..."
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
signedPayload: '0x1234567890abcdef...',
transactionHash: '0xabcdef1234567890...'
})
};
fetch('https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-borrow/transactions/{transactionId}/submit', 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.portalhq.io/api/v3/clients/me/integrations/yield-xyz-borrow/transactions/{transactionId}/submit",
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([
'signedPayload' => '0x1234567890abcdef...',
'transactionHash' => '0xabcdef1234567890...'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.portalhq.io/api/v3/clients/me/integrations/yield-xyz-borrow/transactions/{transactionId}/submit"
payload := strings.NewReader("{\n \"signedPayload\": \"0x1234567890abcdef...\",\n \"transactionHash\": \"0xabcdef1234567890...\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.portalhq.io/api/v3/clients/me/integrations/yield-xyz-borrow/transactions/{transactionId}/submit")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"signedPayload\": \"0x1234567890abcdef...\",\n \"transactionHash\": \"0xabcdef1234567890...\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-borrow/transactions/{transactionId}/submit")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"signedPayload\": \"0x1234567890abcdef...\",\n \"transactionHash\": \"0xabcdef1234567890...\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"link": "https://etherscan.io/tx/0x...",
"status": "BROADCASTED",
"transactionHash": "0x1234567890abcdef...",
"error": "<string>",
"details": {}
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "yield-xyz-borrow returned a response for GET /v1/positions that does not match the expected schema",
"id": "INTEGRATION_RESPONSE_SCHEMA_DRIFT",
"details": {
"integration": "yield-xyz-borrow",
"endpoint": "GET /v1/positions",
"issues": [
{
"path": "supplyBalances.0.balanceUsd",
"message": "Expected string, received number",
"code": "invalid_type"
}
]
}
}{
"error": "<string>"
}Submit signed transaction
Submit a signed transaction. Provide signedPayload to have us broadcast it to the blockchain, or transactionHash if already submitted by the client.
This is a proxy to the Yield.xyz Borrow POST /v1/transactions/{transactionId}/submit endpoint. Portal validates the upstream response against the schema documented here before returning it under data, and translates network values to CAIP-2. If Yield.xyz changes the response shape, Portal returns a 500 with id: INTEGRATION_RESPONSE_SCHEMA_DRIFT instead of a partial response. Upstream reference: docs.yield.xyz.
curl --request POST \
--url https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-borrow/transactions/{transactionId}/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"signedPayload": "0x1234567890abcdef...",
"transactionHash": "0xabcdef1234567890..."
}
'import requests
url = "https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-borrow/transactions/{transactionId}/submit"
payload = {
"signedPayload": "0x1234567890abcdef...",
"transactionHash": "0xabcdef1234567890..."
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
signedPayload: '0x1234567890abcdef...',
transactionHash: '0xabcdef1234567890...'
})
};
fetch('https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-borrow/transactions/{transactionId}/submit', 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.portalhq.io/api/v3/clients/me/integrations/yield-xyz-borrow/transactions/{transactionId}/submit",
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([
'signedPayload' => '0x1234567890abcdef...',
'transactionHash' => '0xabcdef1234567890...'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.portalhq.io/api/v3/clients/me/integrations/yield-xyz-borrow/transactions/{transactionId}/submit"
payload := strings.NewReader("{\n \"signedPayload\": \"0x1234567890abcdef...\",\n \"transactionHash\": \"0xabcdef1234567890...\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.portalhq.io/api/v3/clients/me/integrations/yield-xyz-borrow/transactions/{transactionId}/submit")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"signedPayload\": \"0x1234567890abcdef...\",\n \"transactionHash\": \"0xabcdef1234567890...\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-borrow/transactions/{transactionId}/submit")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"signedPayload\": \"0x1234567890abcdef...\",\n \"transactionHash\": \"0xabcdef1234567890...\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"link": "https://etherscan.io/tx/0x...",
"status": "BROADCASTED",
"transactionHash": "0x1234567890abcdef...",
"error": "<string>",
"details": {}
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "yield-xyz-borrow returned a response for GET /v1/positions that does not match the expected schema",
"id": "INTEGRATION_RESPONSE_SCHEMA_DRIFT",
"details": {
"integration": "yield-xyz-borrow",
"endpoint": "GET /v1/positions",
"issues": [
{
"path": "supplyBalances.0.balanceUsd",
"message": "Expected string, received number",
"code": "invalid_type"
}
]
}
}{
"error": "<string>"
}Authorizations
Client API Key or Client Session Token (CST). Pass as a Bearer token in the Authorization header.
Path Parameters
Transaction ID from action response (UUID)
"550e8400-e29b-41d4-a716-446655440000"
Body
Provide signedPayload to have Yield.xyz broadcast the transaction, or transactionHash if you already broadcast it yourself. One of the two is required.
Response
Transaction submitted successfully
Show child attributes
Show child attributes
Was this page helpful?