Request Distribution Issuance

Request:

mutation {
  makeTaRequestDistributionIssuances(
    input: {
      distributionIds: [
      "8f444de2-bfd9-4ca5-b6f4-74c4e511cebc",
      "450bf0ea-4dbf-4f1d-b82d-12005186b48c",
      "cd84c96d-2f85-4737-ba85-9882a71f35ac"
      ]
    }
  ) {
    taRequests {
      id
      distributionId
      stagedTransferId
      investorId
      status
      createdOn
    }
  }
}
Response:

{
  "data": {
    "makeTaRequestDistributionIssuances": {
      "taRequests": [
        {
          "id": "28eb5562-2cd2-4672-bd4c-537fe7274227",
          "distributionId": "8f444de2-bfd9-4ca5-b6f4-74c4e511cebc",
          "stagedTransferId": "637e3e6d-856b-4a95-ac78-f0cfc6a5b28f",
          "investorId": "9f93a40d-c243-40aa-839b-f1c711e21206",
          "status": "pending",
          "createdOn": "2024-09-04T23:12:18.204916+00:00"
        },
        {
          "id": "487cdd54-752d-4806-817f-ce20033352b1",
          "distributionId": "450bf0ea-4dbf-4f1d-b82d-12005186b48c",
          "stagedTransferId": "5eaaa02f-8021-4e58-aabd-03baa8ba7035",
          "investorId": "cf6ba744-94fc-4173-99e3-d2387229f434",
          "status": "pending",
          "createdOn": "2024-09-04T23:12:18.204916+00:00"
        },
        {
          "id": "3f1ba2f6-6301-4882-9095-6423373c2dc0",
          "distributionId": "cd84c96d-2f85-4737-ba85-9882a71f35ac",
          "stagedTransferId": "737b2015-af78-4c98-a9fe-4d1c0e5594d6",
          "investorId": "c120ca44-e1b5-47d7-9fed-5d161981f40c",
          "status": "pending",
          "createdOn": "2024-09-04T23:12:18.204916+00:00"
        }
      ]
    }
  }
}

In this example, the mutation formally commences the process of issuing shares to investors based on distribution IDs to create a series of transfer requests. (The transfer, in this case, is from treasury to the investor.) The ID of each transfer request is returned in the payload, along with a status value set to pending. These newly created requests must then be approved by the transfer agency desk at Vertalo. Once approved, the distributions are translated into holdings.

The order in which the transfer requests are returned in the mutation response match the order of the distributions in the mutation request. This is significant when mapping distributions to the corresponding holdings (once approved). See below for details on how to create a mapping of distributions to holdings.

There is a singular version of this mutation makeTaRequestDistributionIssuance which takes a single distribution ID as its input.

Webhook

Vertalo will configure a webhook which will issue a callback to an endpoint you provide. A callback will be issued for each distribution submitted through the mutation, once the request has been reviewed and a disposition assigned. The format of the callback is:

{
  "id": "<UUID of request>",
  "status": "complete | failed"
}

The id field contained in the callback corresponds to the respective id field in the response returned by the request mutation (see above).

Querying the Status of Issuance Requests

Request:

query {
  allTaRequests {
    nodes {
      id
      distributionId
      toBlockchainAddressId
      stagedTransferId
      status
      createdOn
      accountByInvestorId {
        id
        name
        email
      }
    }
  }
}
Response:

{
  "data": {
    "allTaRequests": {
      "nodes": [
        {
          "id": "28eb5562-2cd2-4672-bd4c-537fe7274227",
          "distributionId": "8f444de2-bfd9-4ca5-b6f4-74c4e511cebc",
          "toBlockchainAddressId": "4d8c613b-920f-4d00-84f4-afb3fc19bde7",
          "stagedTransferId": "637e3e6d-856b-4a95-ac78-f0cfc6a5b28f",
          "status": "approved",
          "createdOn": "2024-09-04T23:12:18.204916+00:00",
          "accountByInvestorId": {
            "id": "9f93a40d-c243-40aa-839b-f1c711e21206",
            "name": "Investor 3",
            "email": "investor.3@example.com"
          }
        },
        {
          "id": "3f1ba2f6-6301-4882-9095-6423373c2dc0",
          "distributionId": "450bf0ea-4dbf-4f1d-b82d-12005186b48c",
          "toBlockchainAddressId": "287364e8-ebc1-475a-9337-e61e113c65ec",
          "stagedTransferId": "737b2015-af78-4c98-a9fe-4d1c0e5594d6",
          "status": "approved",
          "createdOn": "2024-09-04T23:12:18.204916+00:00",
          "accountByInvestorId": {
            "id": "c120ca44-e1b5-47d7-9fed-5d161981f40c",
            "name": "Investor 2",
            "email": "investor.2@example.com"
          }
        },
        {
          "id": "487cdd54-752d-4806-817f-ce20033352b1",
          "distributionId": "cd84c96d-2f85-4737-ba85-9882a71f35ac",
          "toBlockchainAddressId": "e98073d5-12c6-4402-976d-08d73f253f2c",
          "stagedTransferId": "5eaaa02f-8021-4e58-aabd-03baa8ba7035",
          "status": "approved",
          "createdOn": "2024-09-04T23:12:18.204916+00:00",
          "accountByInvestorId": {
            "id": "cf6ba744-94fc-4173-99e3-d2387229f434",
            "name": "Investor 1",
            "email": "investor.1@example.com"
          }
        }
      ]
    }
  }
}

In this example, the query returns ALL issuance requests submitted by the issuer via the API. Standard GraphQL conditions/filters may be applied to this type of query in order limit the size of the result set. (See the Appendix for more details.) The toBlockchainAddressId will remain null until the request has been approved.

Mapping Distributions to Holdings

Request:

 query {
  blockchainAddressById(id: "e98073d5-12c6-4402-976d-08d73f253f2c") {
    taRequestsByToBlockchainAddressId {
      nodes {
        id
        distributionId
        toBlockchainAddressId
      }
    }
    holdingBlockchainAddressByBlockchainAddressId {
      holdingId
      holdingByHoldingId {
        amount
      }
    }
  }
}
Response:

{
  "data": {
    "blockchainAddressById": {
      "taRequestsByToBlockchainAddressId": {
        "nodes": [
          {
            "id": "3f1ba2f6-6301-4882-9095-6423373c2dc0",
            "distributionId": "cd84c96d-2f85-4737-ba85-9882a71f35ac",
            "toBlockchainAddressId": "e98073d5-12c6-4402-976d-08d73f253f2c"
          }
        ]
      },
      "holdingBlockchainAddressByBlockchainAddressId": {
        "holdingId": "ca7d563d-4bbd-418e-996f-14d625d3c7ac",
        "holdingByHoldingId": {
          "amount": "70000.000000000000000000"
        }
      }
    }
  }
}

In this example, the query follows the path from a toBlockchainAddressId which is assigned to the original transfer request once the request has been approved. (Until then the value will remain null.) This is an example of leveraging the internal blockchain architecture of the Vertalo platform.