Skip to Content
FeaturesManage IssuerRegister or Import Issuer

Register or Import Issuer

Use this page when the issuer already exists outside the main POST /issuer/create flow. For the standard create-and-deploy path, use Create an Issuer.

Which route do I need?

SituationRouteWhat it does
You have nothing yet and want TAP to deploy the cap tablePOST /issuer/create (see Create an Issuer)Deploys a cap table through the factory and saves the issuer in MongoDB.
The cap table was already deployed (frontend wallet, separate script, another system)POST /issuer/registerSaves a TAP record that points at the existing onchain cap table.

Before you use these routes

If the factory is not yet registered in your local stack, use the CLI (preferred — reads implementation onchain automatically):

pnpm factory:register --factory 0xYourFactoryAddress

Or send POST /factory/register directly (requires you to supply both addresses):

{ "factory_address": "<YOUR_FACTORY_ADDRESS>", "implementation_address": "<YOUR_IMPLEMENTATION_ADDRESS>" }

The response returns { "factory": ... }. Prefer the CLI — it reads the live implementation from the factory onchain and never hardcodes a stale address.

Register an issuer that was already deployed

Use POST /issuer/register when a wallet or another system already deployed the cap table and you only need the TAP record.

Send the same issuer fields used in Create an Issuer, plus id, deployed_to, and tx_hash. A complete body looks like:

{ "id": "b6ca9d9c1daa4b30830b444561ef7806", "legal_name": "Transfer Agent Protocol", "formation_date": "2022-08-23", "country_of_formation": "US", "country_subdivision_of_formation": "DE", "initial_shares_authorized": "10000000", "deployed_to": "<CAP_TABLE_ADDRESS>", "tx_hash": "<DEPLOY_TX_HASH>", "comments": [] }

id must be the 32-hex-character UUID-without-dashes that the cap table contract was initialized with (for example b6ca9d9c1daa4b30830b444561ef7806). If you omit id, TAP generates a new UUID and the TAP record will not match the onchain ID, which breaks event polling.

The response returns { "issuer": ... }. Keep that issuer object — you’ll use _id for every later API call.

Read issuer records

  • GET /issuer/id/:id and GET /issuer/full/:id return the full issuer document.
  • GET /issuer/total-number returns the issuer count.

For most workflows, the response from POST /issuer/create or POST /issuer/register is still the main issuer record you keep.

Verify

  1. Confirm the response contains _id, deployed_to, and tx_hash.
  2. GET /issuer/id/:id (or /issuer/full/:id) with the returned _id should succeed.

What’s next?

Last updated on