π§΅ Create and Send Corporate Event
Welcome to the complete guide for the "Create and Send Corporate Event" workflow for the Token City API.
This workflow enables you to create corporate events, send them to ERIR for validation, and execute validated events on the blockchain.
π Objective: Manage corporate actions for tokenized securities in compliance with regulatory requirements through ERIR validation.
π OpenAPI Documentationβ
β¨ Workflow Summaryβ
This workflow automates the process of creating and executing corporate events through ERIR validation:
- πΉ Query available corporate event types
- πΉ Create a corporate event with required documentation
- πΉ ERIR validates the corporate event
- πΉ Execute the validated event on blockchain
Prerequisites:
πΉ You have already created an Issuer on ERIR πΉ You have already created and deployed a token project
π·οΈ Corporate Event Typesβ
Token City supports various corporate event types for different business situations:
- Forced Transfer - Transfer tokens between accounts (e.g., inheritance, court orders)
- Burn Tokens - Destroy tokens from an account (e.g., buyback programs)
- Freeze/Unfreeze Address - Suspend or restore account trading capabilities
- Freeze/Unfreeze Token Amount - Lock specific token quantities for an address
- Recovery Address - Recover lost/compromised wallet funds
- Dividend Payment - Distribute profits to token holders
π Workflow Steps Tableβ
| Step | API Operation | Method | Parameters | Outputs | Description |
|---|---|---|---|---|---|
| Get Available Events | GET /v2/proxy/erir/corporate-event | GET | - | List of available events and required data for each one | Retrieves all available corporate event types and their requirements |
| Create Corporate Event | POST /v2/proxy/erir/corporate-event | POST | Event type, parameters, documents | Corporate event ID, EIP712 object, required signatures | Creates a corporate event with supporting documents for ERIR review |
| Execute Corporate Event | POST /v2/proxy/erir/corporate-event/:id/execute | POST | Corporate event ID | Transaction ID, blockchain confirmation | Executes the ERIR-validated corporate event on blockchain |
π¨ Workflow Visualizationsβ
π Mermaid Sequence Diagramβ
π Step-by-Step Implementationβ
Step 1: Query Available Corporate Event Typesβ
Retrieve the list of corporate event types you can create and their requirements.
Endpoint: GET /v2/proxy/erir/corporate-event
Response:
{
"events": [
{
"type": "FORCED_TRANSFER",
"name": "Forced Transfer",
"description": "Transfer tokens from one account to another",
"requiredFields": ["fromAddress", "toAddress", "amount", "reason"],
"requiredDocuments": ["courtOrder", "legalJustification"],
"approvalRequired": true
},
{
"type": "BURN_TOKENS",
"name": "Burn Tokens",
"description": "Destroy tokens from an account",
"requiredFields": ["fromAddress", "amount", "reason"],
"requiredDocuments": ["boardResolution", "buybackAgreement"],
"approvalRequired": true
},
{
"type": "FREEZE_ADDRESS",
"name": "Freeze Address",
"description": "Suspend trading for a specific address",
"requiredFields": ["address", "reason"],
"requiredDocuments": ["complianceReport", "suspensionOrder"],
"approvalRequired": true
},
{
"type": "DIVIDEND_PAYMENT",
"name": "Dividend Payment",
"description": "Distribute dividends to token holders",
"requiredFields": ["dividendPerToken", "paymentDate", "recordDate"],
"requiredDocuments": ["financialStatement", "boardResolution"],
"approvalRequired": true
}
]
}
Step 2: Create a Corporate Eventβ
Submit a corporate event to ERIR with all required documentation.
Example: Forced Transfer (Inheritance Case)β
Endpoint: POST /v2/proxy/erir/corporate-event
Request Body:
{
"issuanceId": "issuance_456e7890-e89b-12d3-a456-426614174111",
"eventType": "FORCED_TRANSFER",
"parameters": {
"fromAddress": "0xDeceasedAddress1234567890abcdef1234567890ab",
"toAddress": "0xHeirAddress0987654321fedcba0987654321fedcba",
"amount": "1000000000000000000",
"reason": "Inheritance transfer following death of token holder"
},
"documents": {
"courtOrder": "https://docs.acme.com/probate-court-order.pdf",
"legalJustification": "https://docs.acme.com/inheritance-legal-opinion.pdf",
"deathCertificate": "https://docs.acme.com/death-certificate.pdf",
"willDocument": "https://docs.acme.com/last-will-testament.pdf"
},
"requestedBy": {
"name": "John Heir",
"email": "[email protected]",
"role": "Beneficiary"
}
}
Response:
{
"corporateEventId": "event_987f6543-e89b-12d3-a456-426614174444",
"eventType": "FORCED_TRANSFER",
"status": "pending_review",
"submittedAt": "2025-11-10T14:00:00Z",
"estimatedReviewTime": "3-5 business days",
"eip712TypedData": {
"domain": {
"name": "ERIRCorporateEvents",
"version": "1.0.0",
"chainId": 137
},
"types": {
"ForcedTransfer": [
{ "name": "from", "type": "address" },
{ "name": "to", "type": "address" },
{ "name": "amount", "type": "uint256" },
{ "name": "eventId", "type": "bytes32" }
]
},
"primaryType": "ForcedTransfer",
"message": {
"from": "0xDeceasedAddress1234567890abcdef1234567890ab",
"to": "0xHeirAddress0987654321fedcba0987654321fedcba",
"amount": "1000000000000000000",
"eventId": "0x987f6543..."
}
}
}
Example: Dividend Paymentβ
Request Body:
{
"issuanceId": "issuance_456e7890-e89b-12d3-a456-426614174111",
"eventType": "DIVIDEND_PAYMENT",
"parameters": {
"dividendPerToken": "50000000000000000",
"paymentDate": "2025-12-31",
"recordDate": "2025-12-15",
"currency": "USDC",
"totalDividend": "5000000000000000000000"
},
"documents": {
"financialStatement": "https://docs.acme.com/q4-2025-financials.pdf",
"boardResolution": "https://docs.acme.com/dividend-board-resolution.pdf",
"auditReport": "https://docs.acme.com/audit-2025.pdf"
},
"requestedBy": {
"name": "Jane CFO",
"email": "[email protected]",
"role": "Chief Financial Officer"
}
}
Response:
{
"corporateEventId": "event_111a2222-e89b-12d3-a456-426614174555",
"eventType": "DIVIDEND_PAYMENT",
"status": "pending_review",
"submittedAt": "2025-11-10T14:30:00Z",
"estimatedReviewTime": "2-4 business days"
}
Step 3: Wait for ERIR Validationβ
ERIR will review the corporate event and supporting documents. You'll receive notifications via:
- Email to the requestedBy address
- Webhook notification (if subscribed)
- Status updates available via API query
Status Query:
Endpoint: GET /v2/proxy/erir/corporate-event/{id}
Response (Approved):
{
"corporateEventId": "event_987f6543-e89b-12d3-a456-426614174444",
"eventType": "FORCED_TRANSFER",
"status": "approved",
"approvedAt": "2025-11-13T10:00:00Z",
"approvedBy": "ERIR Compliance Team",
"validUntil": "2025-11-20T10:00:00Z",
"executionReady": true
}
Response (Rejected):
{
"corporateEventId": "event_987f6543-e89b-12d3-a456-426614174444",
"eventType": "FORCED_TRANSFER",
"status": "rejected",
"rejectedAt": "2025-11-13T10:00:00Z",
"rejectionReasons": [
"Court order document expired",
"Beneficiary identity not verified",
"Death certificate requires apostille"
],
"canResubmit": true
}
Step 4: Execute the Approved Corporate Eventβ
Once approved, execute the event on the blockchain.
Endpoint: POST /v2/proxy/erir/corporate-event/{id}/execute
Path Parameters:
id: The corporate event ID from Step 2
Request Body:
{
"executionNotes": "Executing inheritance transfer as approved by ERIR"
}
Response:
{
"corporateEventId": "event_987f6543-e89b-12d3-a456-426614174444",
"transactionId": "tx_555b6666-e89b-12d3-a456-426614174666",
"status": "executing",
"message": "Corporate event transaction submitted to blockchain",
"estimatedCompletionTime": "2-5 minutes"
}
TX_MINED Webhook:
{
"type": "TX_MINED",
"event": {
"txUUID": "tx_555b6666-e89b-12d3-a456-426614174666",
"txHash": "0xb5c8bd9430b6cc87a0e2fe110ece6bf527fa4f170a4bc8cd032f768fc5219838",
"timestamp": 1699612800
}
}
π‘ Key Conceptsβ
What are Corporate Events?β
Corporate events are significant actions affecting tokenized securities:
- Mandatory Events: Required by law or regulation (e.g., forced transfer by court order)
- Voluntary Events: Initiated by issuer (e.g., dividend payments, buybacks)
- Compliance Events: Related to regulatory compliance (e.g., freezing suspicious accounts)
ERIR Validation Processβ
- Submission: Event created with supporting documents
- Document Review: ERIR verifies authenticity and completeness
- Legal Review: Compliance with regulations checked
- Approval Decision: Event approved or rejected with feedback
- Execution Window: Approved events must be executed within validity period
- Post-Execution: ERIR records the blockchain transaction
Event Lifecycleβ
- Draft: Event created, not yet submitted
- Pending Review: Submitted to ERIR, awaiting validation
- Under Review: ERIR actively reviewing documents
- Approved: Validated and ready for execution
- Rejected: Not approved, can be resubmitted with corrections
- Executing: Blockchain transaction in progress
- Executed: Successfully completed on blockchain
- Expired: Approval expired before execution