Build on FinP2P: a field guide.
How to connect an app, a ledger, a custody service or a data feed to Ownera's FinP2P network, written by people who have done it, with every step linked into Ownera's own documentation.
Pick your path
Ownera's docs split builders into two kinds, plus the institutions that run the network and the people who only need to read it. Find yourself below.
Business application
A trading venue, issuance platform, wallet, investor portal, treasury or lending tool. You keep your product and add a small integration service that talks to a Router: REST under /finapi for actions, GraphQL for reads. Your users, accounts and orders map to investor profiles, asset profiles and intents.
Utility or connector
A ledger, custody or signing service, payment rail, data feed, compliance check. Other apps consume you, so you implement an adapter API that the Router calls. Ledger, custody and data provider specs are public, with event-driven "proxy" variants if you cannot expose a REST server.
Institution
A bank, market infrastructure or asset manager. You run your own Router (one per organisation) inside your own environment, keep your keys and data, and choose apps from the SuperApps store. Deployment is arranged with Ownera directly.
Researcher, analyst or AI agent
No credentials needed. The store has a public JSON API, Ownera's docs publish an llms.txt and an MCP server, and this site's whole dataset is one CC BY file.
The model in seven terms
- Router
- The FinP2P node each institution runs. Routers talk to each other peer to peer; there is no shared ledger in the middle. ISVs usually connect to their clients' Routers rather than running one. Router fundamentals ↗
- SuperApp
- Any application or service connected to a Router. Ownera's store lists 35 of them today. Integration paths ↗
- Profile
- A global identity for an owner (investor) or an asset. Owner identities are secp256k1 keys. Profiles are shared explicitly with other organisations.
- Intent
- A declarative statement of what should happen: a primary sale, a buying or selling intent, a loan, a transfer, a redemption. It says what, never how on any particular chain. Intent-based orchestration ↗
- Orchestration plan
- The step-by-step workflow the Router generates from an intent and proposes to the other participants' Routers, who approve and execute it together. You submit intents and watch plans; you rarely write plans.
- Adapter
- The bridge between a Router and a ledger, custody provider or data source. Adapters are where chain-specific code lives.
- Certificate
- A signed attribute attached to a profile: KYC, AML, accreditation, company info, NAV. Schemas are public in finp2p-certificates-spec.
Resource IDs look like organization:resource-type:uuid, so an ID tells you which organisation's Router owns it.
How a call flows
- Something happens in your app: an investor clicks buy, a desk books a repo, a rebalancer fires.
- Your integration creates an intent and submits it to your local Router over REST.
- The Router builds an orchestration plan and proposes it to every participating Router.
- The Routers execute it peer to peer, step by step, with full consensus; adapters move the asset and the cash on whatever ledgers they live on.
- Results and proofs come back. Most calls are asynchronous: you get a correlation id (
cid) and poll the operation, or read the plan over GraphQL.
The How it works page draws this end to end with a repo trade.
Authentication
Every request to a Router carries a fresh, single-use JWT signed RS256 with your own private key. Onboarding: generate an RSA key pair, send Ownera the public key, receive an API key and your organisation ID, then sign a new token for every call (it expires 30 seconds after issue, and the nonce cannot be reused).
openssl genrsa -out prv.key 4096
openssl rsa -in prv.key -RSAPublicKey_out -out pub.key # send pub.key to Ownera
// JWT payload, one per request, signed RS256
{
"aud": "<ORGANIZATION_ID>",
"apiKey": "<API_KEY>",
"nonce": "<24 random bytes + 8-byte epoch, hex>",
"iat": 1760380800,
"exp": 1760380830
}
Heads-up: the Hello World sample puts the API key in an apiKey claim. The Authorization reference calls it sub in its prose but uses apiKey in its own code sample. In our own testing with Ownera's engineers (Sep 2026) the auth service read apiKey; setting both sub and apiKey to the API key works. The same reference sets a 5-second default clock-skew tolerance for the nonce, so keep server clocks in sync.
Hello world, in order
Ownera's sandbox comes with a simulated custody service, a simulated payment service and at least one test asset shared with you. The Hello World sample walks through it with full request and response bodies:
| # | Call | What it does |
|---|---|---|
| 1 | POST /finapi/profiles/owner | Create an investor (owner) profile |
| 2 | POST /finapi/profiles/owner/{id}/account | Link the investor to a custody service; async, poll GET /finapi/operations/status/{cid} |
| 3 | POST /finapi/profiles/{id}/certificates | Attach KYC, AML or accreditation certificates |
| 4 | POST /finapi/profiles/{id}/share | Share the investor profile with the issuer's organisation |
| 5 | POST /graphql | Find assets shared with you and their open intents |
| 6 | POST /finapi/tokens/execute | Execute against an intent, for example buy into a primary sale |
| 7 | POST /graphql | Watch the execution plan until it completes |
There is also a dry-run endpoint that predicts the plan for an intent without executing it. Use it while you build.
Adapters: plugging in a ledger, custody or data
If other apps will consume what you build, you implement one of these APIs and the Router calls you. The official skeletons are the fastest start.
| Adapter | You implement | Spec | Starter code |
|---|---|---|---|
| Ledger adapter tokenization platforms, chains, legacy registers | Create asset, issue, transfer, redeem, move, hold, release, rollback, balances, receipts, investor accounts, execution-plan approval | Ledger Adapter ↗ | Node.js skeleton Java skeleton EVM adapter |
| Custody adapter key management and signing | Create accounts (key pairs), signature requests over payload hashes, plan approval | Custody Adapter ↗ Signature schemes ↗ | |
| Data provider adapter pricing, risk, reference and market data | Fetch or subscribe asset data; the Router maps identifiers (an ISIN, say) to providers with data rules and ingests what you return | Data Provider Adapter ↗ Ingest asset data ↗ | LunarCrush data adapter (ours, see disclosure) |
| Proxy variants event-driven, no inbound REST | Pull commands over a Server-Sent Events stream, acknowledge them, post the result back with the command's cid | Proxy Ledger ↗ Proxy Custody ↗ |
Chains already reached by adapters, per public sources: Ethereum and all EVM L1/L2, Hyperledger Besu, Canton, Corda, Hedera, XRP Ledger, Tezos, Stellar, Kadena, Solana, Polygon, 150+ chains via LayerZero. Full list with sources on the network page.
Getting listed on the SuperApps store
Ownera publishes the process at superapps.ownera.io/onboarding-howto. In short:
- Sign up to the SuperApp Portal.
- Create your company profile: legal entity, registration, jurisdiction.
- Submit a draft SuperApp: name, description, use case, asset classes, optional demo.
- Review and agreements: Ownera due diligence (KYC), then NDA, Platform Terms, Partnership and Commercial agreements. You are listed in development status.
- Connect to the sandbox Router and validate connectivity.
- Go to production once testing and agreements are done.
Ownera publishes no fees for listing. Once you are listed, tell us and you will show up on this site's map with the next data refresh.
Open code and public endpoints
| What | Where | Auth |
|---|---|---|
| Official docs, guides and API reference | finp2p-docs.ownera.io | none |
| Docs index for LLMs | finp2p-docs.ownera.io/llms.txt | none |
| Docs MCP server (search and read the OpenAPI specs from an agent) | https://finp2p-docs.ownera.io/mcp | none to read |
| SuperApps store API: apps, participant types, categories | /api/apps · /api/types · /api/categories | none |
| Ownera on GitHub: adapters, certificate schemas, samples | github.com/owneraio | public |
| This site's dataset (apps, derived connections, institutions, sources) | /data/graph.json · /data/index.json | none, CC BY 4.0 |
| A Router (sandbox or production) | URL issued by Ownera or your institution | RS256 JWT per call |
Recent changes in Ownera's open code (checked 6 Nov 2026): the EVM adapter v0.29.0 shipped on 12 Oct; the Node.js skeleton now maps swap and move execution-plan instructions and keeps the Router's EIP-712 type definitions on signing templates (20 to 22 Oct); the certificates spec added collateral-terms v3, with the haircut method set on the agreement (18 to 20 Oct); and the Tezos adapter was archived on 1 Nov.
Shipped something, or found a mistake here?
If you built on FinP2P, tell us: we will add it to the map, and if you are a founder, Draper Goren Blockchain may want to back it. If this guide has drifted from the official docs, email alon@dgb.vc and we will fix it the same week.