Products

A product represents a crypto security issued by an issuer.

Creating a product

To create a product ensure, that you have already created an issuer and have the ID of the issuer resource available.

The following data is needed to create a product:

Field
Description

issuer_id

ID of the issuer the product should be created for

name

Name of the product. This will be displayed across Cashlink Connect and in the token smart contract

product_type

The legal type of the product. These types are available: DIGITAL_COMPANY_SHARE

BOND

SUBORDINATED_LOAN

PARTICIPATION_PAPER

PARTICIPATION_RIGHT,

AIF

DEBT_SECURITY

CONVERTIBLE_BOND

FUND_SHARE

ewpg

If set to true, a crypto security will be created. If set to false, a digital security will be created

isin

ISIN of the crypto security to be created

nominal_value

The nominal value per unit as stated in the issuance document. If the value of provide_nominal_value is set to True, this field needs to be set.

provide_nominal_value

Set this to True if you want to provide a nominal_value . If this is set to False, you need to set a value for issuance_price.

issuance_price

If the value of provide_nominal_value is set to False, this field needs to be set to the initial price of one unit at issuance.

max_issuable_amount

The maximum number of units for sale as stated in the issuance document

step_size

Investments on the primary market are only possible in an integer multiple of the step size value. E.g. if step_size is 5, investments can only be made for 5, 10, 15, ...

agio_percent

Percentage value of agio that should be used for investments on the primary market

payment_deadline

Number of days that investors have time to pay the investment amount on the primary market

cancellation_deadline

Number of days that investors have time to cancel the investment on the primary market

network

DLT network where the crypto security should be issued on.

These networks are available on production: ETH-MAINNET

POLYGON-MAINNET

STELLAR-PUBNET

These networks are available on demo: ETH-TEST POLYGON-AMOY STELLAR-TESTNET

code

Should be set to a unique human-readable string to identify the crypto security on the DLT network and is third-party wallet software. Must be alphanumeric and shorter than 12 characters.

calculation_factor

The relation between one token and one asset. If there is no underlying real world asset, set this value to 1.

lock_in_time

Until this date and time, the crypto security cannot be transferred between investors. Only investments on the primary market are possible.

issuance_document_id

ID of the issuance document that will be made available to the public on the Cashlink website

publication_restricted

Indicates if the publication of the product is restricted. Please note that a publication can only be restricted if the crypto security is offered only to a restricted audience.

Example:

r = requests.post(
    f'{URL}/issuer/v2/documents/',
    files={'file': ('issuance-terms.pdf', b'ASD', 'application/pdf')},
    headers={**headers, 'X-Idempotency-Key': make_key()}
)
assert r.status_code < 300, r.content
issuance_document_id = r.json()['id']

r = requests.post(
    f'{URL}/issuer/v2/products/',
    json={
        'name': 'Test',
        'product_type': 'BOND',
        'agio_percent': '0',
        'provide_nominal_value': True,
        'nominal_value': {
            'amount': '1000',
            'decimals': 3,
            'currency': 'EUR'
        },
        'max_issuable_amount': 1000000,
        'step_size': 1,
        'payment_deadline': 3,
        'cancellation_deadline': 14,
        'network': 'polygon-amoy',
        'code': 'TEST25',
        'calculation_factor': 1,
        'lock_in_time': '2026-09-22T11:58:26.318Z',
        'issuance_document_id': issuance_document_id,
        'issuer_id': issuer_id,
        'ewpg': True,
        'isin': 'US0378331005',
        'publication_restricted': False
    },
    headers={**headers, 'X-Idempotency-Key': make_key()}
)
assert r.status_code < 300, r.content
print(f'Product: {r.json()['id']}')

After the product is created, Cashlink will validate the product details and check if they match the uploaded issuance documents. Once the check is done, the product is deployed and can be used for issuances.

Retrieving product information

You can use the products endpoint to retrieve a list of all products and details about individual products.

Example:

r = requests.get(
    f'{URL}/issuer/v2/products/',
    headers={**headers}
)
assert r.status_code < 300, r.content
product_id = r.json()['results'][0]['id']

r = requests.get(
    f'{URL}/issuer/v2/products/{product_id}/',
    headers={**headers}
)
assert r.status_code < 300, r.content
print(f'Status: {r.json()['status']}')   

The product status field may have the following values

Status
Description

created

You have submitted the product data but the validation failed. If a product is in this state you may still edit (patch) the product details.

validation_pending

The product is currently validated by Cashlink.

validation_success

The product has been validated successfully. The issuance document is published on the Cashlink website.

queued

The deployment on the DLT network is queued and will be processed shortly.

processing

The deployment process of the smart contract has been started but is not yet finished.

succeeded

The deployment process of the smart contract is done and you can retrieve the smart contract address.

failed

The deployment process on the DLT network has failed. Reach out to the Cashlink Service Desk to clarify the details.

unknown

The deployment process is in an unknown state. Reach out to the Cashlink Service Desk to clarify the details.

Last updated

Was this helpful?