External Account API: initial SEP draft#1934
Conversation
Submits the External Account API draft that has been iterated in discussion stellar#1902 since 2026-03-19. Filename uses the README's sep_{shorttitle}.md draft convention; the preamble claims SEP: 0058 based on discussion-thread precedence, but the author will accept whatever number maintainers assign. Note: SEP-0058 was concurrently assigned in PR stellar#1933 to Leigh McCulloch's "Contract Build Reproducibility" draft. This submission predates that one by ~6 weeks of community discussion (stellar#1902 since March; stellar#1923 since May). Coordination with @leighmcculloch is underway out of band. Either author is happy to take a different number — flagging the situation for maintainers. Spec highlights (v0.4.0): - Standard API for provisioning inbound receiving instruments (crypto deposit addresses, virtual bank accounts, bank credentials) bound to an authenticated Stellar wallet. - Authentication via SEP-10 (G.../M...) and SEP-45 (C...). - v0.4.0 adds currency to crypto_address offerings/requests/responses and to the idempotency key, motivated by real anchor deployments (e.g. Bridge) offering multiple currencies on the same chain_id. Discussion: https://github.com/orgs/stellar/discussions/1902
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Adds a new draft SEP-58 specification defining an “External Account API” for provisioning reusable inbound receiving instruments (crypto deposit addresses, virtual bank accounts, bank credentials) bound to an authenticated Stellar account.
Changes:
- Introduces SEP-58 with discovery, authentication (SEP-10/SEP-45), and core resource/object model.
- Specifies endpoints (
/info,/accounts,/accounts/:id), lifecycle/status semantics, and idempotency rules. - Defines webhook/callback guidance reusing SEP-6 signing conventions and KYC remediation via SEP-12.
|
SEP numbers are assigned by the person merging the changes into the repository. I've assigned SEP-59 to the proposal, and updated the self-references within to match, and formatted the file. Recommend avoiding self-references and within a proposal instead saying "This proposal" as is very common in other SEPs. GitHub Copilot ran on this PR and made some suggestions that may or may not be of interest in a follow up but that's up to you. Thanks! |
Summary
Submits the External Account API draft for inclusion as a SEP. The draft
defines a standard API for wallets and clients to request provisioned inbound
receiving instruments (crypto deposit addresses, virtual bank accounts, bank
account credentials) bound to an authenticated Stellar wallet, with SEP-10 /
SEP-45 authentication.
This proposal has been iterated in discussion #1902
since 2026-03-19.
The submitted filename follows the README convention:
sep_externalaccount.md.The preamble currently claims
SEP: 0058— maintainers are welcome to assignwhatever number is appropriate.
SEP-58 number conflict — for maintainer attention
The preamble requests SEP-58. I am aware that #1933 assigned SEP-0058 to
@leighmcculloch's Contract Build Reproducibility draft. The two drafts
overlap in number only — they cover different problem spaces.
Timeline:
I am coordinating with @leighmcculloch out of band. I'm happy to take any
SEP number maintainers think fits — this submission flags the timing for
the record; please assign whatever works. The substantive ask is for the
draft itself to be accepted into the repo.
v0.4.0 highlights
currencytocrypto_addressofferings, requests, and accountresponses to disambiguate multi-currency-per-chain offerings (motivated by
real anchor deployments — e.g. Bridge offering both USDC and USDT on
eip155:1).crypto_addressidempotency key to(authenticated_subject, kind, chain_id, currency).and a possible
messagefield on the KYC 403 body.Test plan
sep-XXXX.mdat merge)