DevelopmentIssue Stock

Issue Stock

With an issuer, stock class, and stakeholder created, you can now issue stock to stakeholders. This is the first actual transaction on your cap table.

In the primary /app flow, the connected ADMIN wallet calls issueStock directly. After confirmation, the app validates optimistic metadata through POST /transactions/issuance/stock/register-onchain; the poller writes the canonical issuance and chain-generated IDs. The server-signed alternative below calls issuanceController.js.

Send a POST request

Using Postman or curl, send a POST request to http://localhost:8293/transactions/issuance/stock

{
    "issuerId": "<YOUR_ISSUER_ID>",
    "data": {
        "stakeholder_id": "<YOUR_STAKEHOLDER_ID>",
        "stock_class_id": "<YOUR_STOCK_CLASS_ID>",
        "quantity": "100000",
        "share_price": {
            "amount": "4.20",
            "currency": "USD"
        },
        "stock_legend_ids": [],
        "custom_id": "CS-A-001",
        "security_law_exemptions": [],
        "comments": ["Founder stock issuance"]
    }
}

Replace the IDs with the _id values from your previous creation responses.

Check the response

The server-signed response includes a prepared OCF issuance shape. Its validation IDs are not the authoritative onchain IDs; read the poller-backed history after confirmation for the canonical transaction and security IDs.

⚠️

API examples use human share_price.amount values. The contract stores them scaled by 1e10 (10,000,000,000). Divide raw onchain values by 1e10 before comparing. The server and poller handle this automatically for API consumers.

{
    "stockIssuance": {
        "id": "<GENERATED_ISSUANCE_ID>",
        "security_id": "<GENERATED_SECURITY_ID>",
        "date": "2026-01-01",
        "object_type": "TX_STOCK_ISSUANCE",
        "stakeholder_id": "<YOUR_STAKEHOLDER_ID>",
        "stock_class_id": "<YOUR_STOCK_CLASS_ID>",
        "quantity": "100000",
        "share_price": {
            "amount": "4.20",
            "currency": "USD"
        },
        "stock_legend_ids": [],
        "custom_id": "CS-A-001",
        "security_law_exemptions": [],
        "comments": [
            "Founder stock issuance"
        ]
    }
}

Outputs

FieldWhat it identifies
idThe issuance transaction’s OCF ID.
security_idIdentifies an active block of shares. Use the canonical value from poller-backed history for later security-specific actions. Transfers and partial lifecycle actions may consume a security and create new balance security IDs.
dateOnchain timestamp at the issuance block.

Required fields

FieldDescription
stakeholder_idThe stakeholder receiving the shares.
stock_class_idThe class of stock being issued.
quantityNumber of shares to issue, as a string integer.
share_priceObject with human amount and currency. The contract stores amount * 1e10 (10,000,000,000). The server scales on write; the poller unscales on read.
stock_legend_idsLegend IDs from POST /stock-legend/create. Pass [] if you don’t need any.
custom_idIssuance label (e.g. CS-A-001). Free-form, but unique custom IDs make support workflows easier.
security_law_exemptionsReg D / Reg S exemptions cited by the issuance. Pass [] if none apply.

Viewing historical transactions

Once stock is issued, you can view all transactions for an issuer:

GET /historical-transactions/issuer-id/<YOUR_ISSUER_ID>

This returns all stock issuances, transfers, cancellations, and other equity events.

What’s next?