REST API
Stableyard provides a comprehensive REST API for all integrations. Use standard HTTP clients in any language.Base URLs
| Environment | Base URL |
|---|---|
| Sandbox | https://sandbox.api.stableyard.fi |
| Production | https://api.stableyard.fi |
Authentication
All requests require theAuthorization header with Basic auth. Account and Vault APIs use both STABLEYARD_APP_ID and STABLEYARD_APP_SECRET. All other APIs use only STABLEYARD_APP_ID. Obtain your credentials from the Stableyard SDK:
Copy
# Account & Vault APIs (STABLEYARD_APP_ID and STABLEYARD_APP_SECRET)
curl -X GET https://api.stableyard.fi/sdk/v1/get-user?userId=user_123 \
-H "Authorization: Basic $(echo -n $STABLEYARD_APP_ID:$STABLEYARD_APP_SECRET | base64)" \
-H "Content-Type: application/json"
Copy
# Other APIs (only STABLEYARD_APP_ID needed)
curl -X POST https://api.stableyard.fi/sdk/v1/quote \
-H "Authorization: Basic $(echo -n $STABLEYARD_APP_ID | base64)" \
-H "Content-Type: application/json"
Language Examples
JavaScript / TypeScript
Copy
const APP_ID = process.env.STABLEYARD_APP_ID;
const APP_SECRET = process.env.STABLEYARD_APP_SECRET;
const BASE_URL = 'https://api.stableyard.fi';
const credentials = Buffer.from(`${APP_ID}:${APP_SECRET}`).toString('base64');
const appIdOnly = Buffer.from(APP_ID).toString('base64');
// Register a user
async function registerUser(username: string, addresses: string[]) {
const response = await fetch(`${BASE_URL}/sdk/v1/register`, {
method: 'POST',
headers: {
'Authorization': `Basic ${credentials}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ username, addresses })
});
return response.json();
}
// Get user balance
async function getBalance(userId: string) {
const response = await fetch(`${BASE_URL}/sdk/v1/get-balance`, {
method: 'POST',
headers: {
'Authorization': `Basic ${credentials}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ userId })
});
return response.json();
}
// Create payment quote
async function createQuote(userId: string, amount: string, destinationPaymentAddress: string) {
const response = await fetch(`${BASE_URL}/sdk/v1/quote`, {
method: 'POST',
headers: {
'Authorization': `Basic ${appIdOnly}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ userId, amount, destinationPaymentAddress })
});
return response.json();
}
Python
Copy
import requests
import base64
APP_ID = 'YOUR_STABLEYARD_APP_ID'
APP_SECRET = 'YOUR_STABLEYARD_APP_SECRET'
BASE_URL = 'https://api.stableyard.fi'
credentials = base64.b64encode(f'{APP_ID}:{APP_SECRET}'.encode()).decode()
headers = {
'Authorization': f'Basic {credentials}',
'Content-Type': 'application/json'
}
# Register a user
def register_user(partner_id, username, addresses):
response = requests.post(
f'{BASE_URL}/sdk/v1/register',
headers=headers,
json={
'username': username,
'addresses': addresses
}
)
return response.json()
# Get user balance
def get_balance(user_id):
response = requests.post(
f'{BASE_URL}/sdk/v1/get-balance',
headers=headers,
json={'userId': user_id}
)
return response.json()
# Create payment quote
def create_quote(user_id, partner_id, amount, destination):
response = requests.post(
f'{BASE_URL}/sdk/v1/quote',
headers=headers,
json={
'userId': user_id,
'amount': amount,
'destinationPaymentAddress': destination
}
)
return response.json()
Go
Copy
package main
import (
"bytes"
"encoding/base64"
"encoding/json"
"net/http"
)
const (
appID = "YOUR_STABLEYARD_APP_ID"
appSecret = "YOUR_STABLEYARD_APP_SECRET"
baseURL = "https://api.stableyard.fi"
)
func getAuthHeader() string {
return "Basic " + base64.StdEncoding.EncodeToString([]byte(appID+":"+appSecret))
}
func registerUser(username string, addresses []string) (map[string]interface{}, error) {
payload, _ := json.Marshal(map[string]interface{}{
"username": username,
"addresses": addresses,
})
req, _ := http.NewRequest("POST", baseURL+"/sdk/v1/register", bytes.NewBuffer(payload))
req.Header.Set("Authorization", getAuthHeader())
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
return result, nil
}
Complete Payment Flow Example
Copy
// 1. Register user
const user = await registerUser('your_partner_id', 'alice', ['0x...']);
console.log('User created:', user.data.userId);
// 2. Create vault
const vault = await fetch(`${BASE_URL}/sdk/v1/create-vault`, {
method: 'POST',
headers: { 'Authorization': `Basic ${credentials}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ userId: user.data.userId })
}).then(r => r.json());
console.log('Vault:', vault.data.vaultAddress);
// 3. Get balance
const balance = await getBalance(user.data.userId);
console.log('Balance:', balance.data.balance, 'USDC');
// 4. Create payment quote
const quote = await createQuote(
user.data.userId,
'your_partner_id',
'100.00',
'merchant@stableyard'
);
console.log('Quote:', quote.data.quoteData);
// 5. User signs the quote payload (implement based on your wallet)
const signature = await getUserSignature(quote.data.quoteData.payload);
// 6. Settle payment
const settlement = await fetch(`${BASE_URL}/sdk/v1/settle`, {
method: 'POST',
headers: { 'Authorization': `Basic ${appIdOnly}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
payload: quote.data.quoteData.payload,
signature: signature,
domain: quote.data.domain,
types: quote.data.types
})
}).then(r => r.json());
console.log('Payment settled:', settlement);
API Access
Contact us for API access:- Telegram: @miteshmetha
- Email: mitesh@stableyard.fi
See API Overview for complete endpoint documentation.