Transfer Agent Integration
Connect transfer agents to Liquidity.io — record ownership transfers, manage cap tables, corporate actions
For SEC-registered transfer agents who record ownership changes, maintain shareholder records, and process corporate actions for securities trading on Liquidity.io.
What You Get
- Receive
transfer.initiatedwebhooks when trades settle - Acknowledge transfers and update cap table records
- Record dividends, stock splits, and corporate actions
- On-chain settlement verification
- Shareholder record synchronization
- SEC reporting data exports
Authentication
Register as an IAM organization with transfer_agent role:
curl -X POST https://iam.liquidity.io/api/login/oauth/access_token \
-d grant_type=client_credentials \
-d client_id=$CLIENT_ID \
-d client_secret=$CLIENT_SECRET \
-d scope=openidYour sec_registration_number is verified during onboarding.
Transfer Flow
Liquidity.io ATS Your TA System
│ │
│ Trade executed, settlement pending │
│ │
│ webhook: transfer.initiated │
│ {transfer_instruction_id, │
│ seller, buyer, units, security} │
│ ─────────────────────────────────► │
│ │
│ Verify + update cap table │
│ │
│ POST /v1/transfers/:id/acknowledge │
│ {status: "completed", │
│ record_date, new_cert_number} │
│ ◄───────────────────────────────── │
│ │
│ webhook: transfer.completed │
│ ─────────────────────────────────► │API Endpoints
Transfers
GET /v1/transfers List pending transfers for your securities
GET /v1/transfers/:id Transfer detail
POST /v1/transfers/:id/acknowledge Acknowledge transfer (accept/reject)
POST /v1/transfers/:id/complete Mark transfer as recorded on cap tableAcknowledge Request
{
"acknowledged": true,
"transfer_instruction_id": "ti_corp_aa1b2c3d",
"record_date": "2026-03-22T00:00:00.000Z",
"units_to_transfer": 1000,
"status": "pending_transfer",
"notes": "Transfer approved, pending cap table update"
}Complete Request
{
"status": "completed",
"record_date": "2026-03-24T00:00:00.000Z",
"new_certificate_number": "CERT-2026-0042",
"legend_applied": true,
"cap_table_updated_at": "2026-03-24T10:30:00.000Z"
}Cap Table
GET /v1/captable/:security_id Current cap table
GET /v1/captable/:security_id/holders Shareholder list
GET /v1/captable/:security_id/history Transfer history
POST /v1/captable/:security_id/import Bulk import holdersCorporate Actions
POST /v1/corporate-actions Announce corporate action
GET /v1/corporate-actions List actions for your securities
GET /v1/corporate-actions/:id Action detail + statusDividend Declaration
{
"security_id": "asset_corp_7g8h",
"action_type": "dividend",
"record_date": "2026-06-15T00:00:00.000Z",
"payment_date": "2026-06-30T00:00:00.000Z",
"amount_per_share": 0.25,
"currency": "USD",
"description": "Q2 2026 quarterly dividend"
}Stock Split
{
"security_id": "asset_corp_7g8h",
"action_type": "stock_split",
"effective_date": "2026-07-01T00:00:00.000Z",
"ratio_from": 1,
"ratio_to": 2,
"description": "2:1 forward stock split"
}Restrictions
GET /v1/securities/:id/restrictions Current transfer restrictions
PATCH /v1/securities/:id/restrictions Update restrictionsRestriction Fields
{
"legend_required": true,
"rule_144_holding_period_met": false,
"transfer_restrictions": "Subject to issuer consent, right of first refusal, and applicable securities laws",
"lock_up_expiry_date": null
}Reporting
GET /v1/reports/shareholder-register SEC shareholder register
GET /v1/reports/transfer-log Transfer log (date range)
GET /v1/reports/dividend-history Dividend payment records
GET /v1/reports/form-ta-2 SEC Form TA-2 dataWebhook Events You Receive
| Event | When | Key Fields |
|---|---|---|
transfer.initiated | Trade settled, transfer pending | transfer_instruction_id, buyer, seller, units, security |
settlement.finalized | On-chain settlement confirmed | trade_id, status, tx_hash |
dividend.declared | Issuer declares dividend | security_id, record_date, amount_per_share |
corporate_action.announced | Stock split, merger, etc. | security_id, action_type, effective_date |
transfer.initiated Payload
The transfer agent section from the trade webhook:
{
"transfer_agent": {
"firm_name": "Acme Transfer Agent Co.",
"sec_registered": true,
"sec_registration_number": "84-01234",
"acknowledgment": {
"acknowledged": true,
"acknowledged_at": "2026-03-22T14:32:05.000Z",
"transfer_instruction_id": "ti_corp_aa1b2c3d",
"record_date": "2026-03-22T00:00:00.000Z",
"units_to_transfer": 1000,
"status": "pending_transfer"
}
}
}On-Chain Verification
Transfer agents can independently verify settlements on-chain:
# Query SettlementRegistry by trade UUID
cast call $REGISTRY "lookupByUUID(string)(bytes16)" "txn_corp_1a2b3c4d" \
--rpc-url https://rpc.liquidity.io/ext/bc/C/rpc
# Get all settlement transactions for a trade
cast call $REGISTRY "getTxsByUUID(string)" "txn_corp_1a2b3c4d" \
--rpc-url https://rpc.liquidity.io/ext/bc/C/rpcExplorer: explorer.liquidity.io
Supported Entity Types
Transfer agents handle all 7 entity structures:
| Entity | Issuer Type | Typical TA Considerations |
|---|---|---|
| Corporation | private_corporation | Stock certificates, legend requirements |
| LLC | limited_liability_company | Membership interest transfers, operating agreement |
| Partnership | limited_partnership | LP unit transfers, GP consent required |
| Public Company | public_company | DTC-eligible, Rule 144 tracking |
| Sole Proprietorship | sole_proprietorship | Equity interest, simpler transfer |
| SPV | special_purpose_vehicle | Investor interest units, waterfall provisions |
| Trust | trust | Beneficial interest units, trustee approval |
Getting Started
- Verify SEC registration (Form TA-1)
- Email ta-partnerships@liquidity.io
- Receive IAM credentials
- Register webhook endpoints
- Import existing cap table for a test security
- Process a sandbox transfer on testnet
See also: Cross-Listing for full webhook payload specification.