REST API

Stableyard provides a comprehensive REST API for all integrations. Use standard HTTP clients in any language.

Base URLs

EnvironmentBase URL
Sandboxhttps://sandbox.api.stableyard.fi
Productionhttps://api.stableyard.fi

Authentication

All requests require the x-sdk-key header:
curl -X GET https://api.stableyard.fi/sdk/v1/get-user?userId=user_123 \
  -H "x-sdk-key: YOUR_API_KEY" \
  -H "Content-Type: application/json"

Language Examples

JavaScript / TypeScript

const API_KEY = process.env.STABLEYARD_API_KEY;
const BASE_URL = 'https://api.stableyard.fi';

// Register a user
async function registerUser(partnerId: string, username: string, addresses: string[]) {
  const response = await fetch(`${BASE_URL}/sdk/v1/register`, {
    method: 'POST',
    headers: {
      'x-sdk-key': API_KEY,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ partnerId, 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: {
      'x-sdk-key': API_KEY,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ userId })
  });
  return response.json();
}

// Create payment quote
async function createQuote(userId: string, partnerId: string, amount: string, destinationPaymentAddress: string) {
  const response = await fetch(`${BASE_URL}/sdk/v1/quote`, {
    method: 'POST',
    headers: {
      'x-sdk-key': API_KEY,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ userId, partnerId, amount, destinationPaymentAddress })
  });
  return response.json();
}

Python

import requests

API_KEY = 'YOUR_API_KEY'
BASE_URL = 'https://api.stableyard.fi'

headers = {
    'x-sdk-key': API_KEY,
    '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={
            'partnerId': partner_id,
            '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,
            'partnerId': partner_id,
            'amount': amount,
            'destinationPaymentAddress': destination
        }
    )
    return response.json()

Go

package main

import (
    "bytes"
    "encoding/json"
    "net/http"
)

const (
    apiKey  = "YOUR_API_KEY"
    baseURL = "https://api.stableyard.fi"
)

func registerUser(partnerId, username string, addresses []string) (map[string]interface{}, error) {
    payload, _ := json.Marshal(map[string]interface{}{
        "partnerId": partnerId,
        "username":  username,
        "addresses": addresses,
    })

    req, _ := http.NewRequest("POST", baseURL+"/sdk/v1/register", bytes.NewBuffer(payload))
    req.Header.Set("x-sdk-key", apiKey)
    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

// 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: { 'x-sdk-key': API_KEY, '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: { 'x-sdk-key': API_KEY, '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:
See API Overview for complete endpoint documentation.