Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
---
title: Monitoring
description: Guide to using the Stellar Disbursement Platform CLI
keywords: [SDP, CLI]
description: Guide to monitoring SDP via Prometheus and Grafana
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good catch here!

sidebar_position: 70
---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,83 @@ sidebar_position: 5
pagination_label: "Admin Guide: Overview"
---

## What is SDP?

The Stellar Disbursement Platform (SDP) is an orchestration layer for sending bulk payments over the Stellar network, combining operator-facing dashboards with APIs that cover onboarding, compliance, and funds delivery. It removes the friction of high-volume disbursements—recipient messaging, wallet registration, treasury controls, and Stellar transaction submission—so organizations can stand up programs quickly. SDP is built for NGOs, fintech platforms, payroll teams, and marketplaces that need predictable, traceable payouts without building Stellar plumbing themselves.

## When to Use SDP

SDP is the right fit when you need:

- **Humanitarian aid / cash assistance:** Register recipients with OTP-secured flows, send invite messages over SMS or WhatsApp, and push scheduled disbursements as soon as wallets are verified (while still handling admin notifications over email).
- **Payroll or stipend programs:** Enforce MFA and reCAPTCHA for admins, expose Prometheus metrics for reliability teams, and keep treasury funds in a managed hot wallet while still settling quickly on Stellar.
- **Merchant, gig, or platform payouts:** Use the Admin/Dashboard APIs plus native SEP-10/SEP-24 flows so funds land in trusted anchors, connect to custody or off-ramps, and deliver global payouts through a single control plane.

## What SDP Does Well

- High-volume batch payments with queueing, schedulers, and automated submission to Stellar ledgers.
- Compliance-friendly flows (MFA, reCAPTCHA, SEP-10 auth, SEP-24 interactive deposits, trusted wallets).
- Fast settlement via Stellar with real-time monitoring from the Transaction Submission Service.
- Integrations across custody, wallets, and fiat ramps with configurable messaging channels.
- Clear Admin/Dashboard APIs and Prometheus metrics for observability.
- Works globally with multi-tenant isolation via tenant-specific schemas and tunable resource limits per deployment.

## Key Features

### Core

- Admin API for tenant provisioning and Dashboard API for operator workflows.
- Message Service for invitations, OTPs, and notifications via AWS SES, Twilio SendGrid, Twilio SMS/WhatsApp, and AWS SNS.
- Wallet Registration UI hosted by SDP so recipients can self-serve verification and connect Stellar wallets.
- Native SEP-10/SEP-24 endpoints plus `stellar.toml` generation for wallet compatibility.
- Transaction Submission Service (TSS) that picks up queued payouts, submits them to Stellar, and feeds back status.

### Enterprise

- Environment- or tenant-level controls for MFA, reCAPTCHA, and wallet policies, with guidance on hot vs. cold treasury wallets.
- Multi-tenant mode with isolated admin, TSS, and tenant schemas inside Postgres plus per-tenant configuration.
- Helm, Docker Compose, and CLI tooling for reproducible deployments and migrations.

### Operational

- Scheduler-driven jobs for invitations, payment submission, and reconciliation, each with tunable intervals.
- Tunable PostgreSQL connection pools to keep multi-tenant workloads stable.
- Prometheus metrics export plus extensible APIs for external automation.

## Architecture at a High Level

- **SDP Orchestrator:** Core services plus the Transaction Submission Service manage recipient onboarding, messaging, scheduling, and Stellar transaction lifecycles.
- **Treasury Account:** Organizations fund payouts from a controlled hot wallet, with policies to move excess funds to cold custody.
- **User & Trusted Wallets:** Recipient's wallet to receive funds and initiate local off-ramp journeys.
- **On/Off-Ramps & Stellar:** Anchors, custody providers, or fiat ramps bridge SDP-managed payouts to local rails while Stellar provides fast, low-cost settlement.

```mermaid
sequenceDiagram
participant Org as Org Admin
participant Treasury as Treasury Account
participant SDP as SDP Orchestrator
participant TSS as Transaction Submission Service
participant Stellar as Stellar Network
participant Wallet as User Wallet
participant Ramp as On / Off-Ramp

Org->>Treasury: Fund treasury account with Stellar asset
Org->>SDP: Upload recipients & schedule disbursement
SDP->>SDP: Check recipient wallet status
alt Wallet not registered
SDP->>Wallet: Send SMS invite + deep link to Stellar wallet (first-time recipients)
Wallet->>Wallet: User installs wallet via deep link & signs up
Wallet-->>SDP: User submits OTP + verification data
else Wallet already registered
SDP-->>SDP: Use wallet on file
end
SDP->>Wallet: Link wallet address to recipient profile / phone
SDP->>TSS: Queue payouts & monitor submission status
TSS->>Stellar: Submit Stellar payment transactions
Stellar-->>Wallet: Credit recipient wallet
Wallet->>Ramp: Cash-out / local transfer
```

The entire SDP step-by-step process usually looks something like the following after the SDP is deployed and organizational users have been set up:

1. The organization funds the SDP’s distribution account with a Stellar-based asset (e.g. USDC)
Expand All @@ -14,7 +91,3 @@ The entire SDP step-by-step process usually looks something like the following a
6. Once the recipient has signed up and their Stellar account has been created, the wallet immediately authenticates with the SDP using parameters from the deep link and opens the SDP registration web view for the recipient to complete verification
7. The user confirms their identity by providing an OTP code sent to their phone number and an additional piece of verification information for security purposes. The SDP supports three different types of verification information: Date of Birth, Personal PIN, and National ID. This information is input by the recipient in a web flow and passes directly to the SDP, meaning the wallet does not need to process or store this information.
8. The SDP verifies the recipient’s information. If it matches the information from the CSV, the SDP automatically makes the payment to the recipient’s Stellar account

Graphic representation of flow of funds:

![Flow of Funds](/assets/SDP/SDP1.png)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this SDP1.png image used anywhere else? might be good to remove the file, too, if this is the only reference to it.

4 changes: 1 addition & 3 deletions docusaurus.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ const config: Config = {
trailingSlash: false,
onBrokenAnchors: "ignore",
onBrokenLinks: "throw",
onBrokenMarkdownLinks: "throw",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Docusaurus 3 dropped markdown.hooks.onBrokenMarkdownLinks, so we move that setting to the supported top-level onBrokenMarkdownLinks: "throw" to stop yarn start from failing.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think you might be looking at it the wrong way around. v3.9 marked siteConfig.onBrokenMarkdownLinks as deprecated, and the warnings are saying to instead use siteConfig.markdown.hooks.onBrokenMarkdownLinks. We updated to the latest docusaurus recently, so you might need to do a yarn install?

Source: https://docusaurus.io/docs/api/docusaurus-config#onBrokenMarkdownLinks

favicon: "img/docusaurus/favicon-96x96.png",
organizationName: "stellar",
projectName: "stellar-docs",
Expand Down Expand Up @@ -84,9 +85,6 @@ const config: Config = {
mdx1Compat: {
headingIds: true,
},
hooks: {
onBrokenMarkdownLinks: 'throw',
},
},
themes: ["docusaurus-theme-openapi-docs", "@docusaurus/theme-mermaid"],
presets: [
Expand Down