Skip to Content
FeaturesManage IssuerRegister Issuer

Register Issuer

Use this page when the cap table was already deployed and you only need the TAP Mongo record. There is no OCF zip/manifest import route (POST /mint-cap-table was removed). For first-time create-and-deploy, 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": "0xb6ca9d9c1daa4b30830b444561ef7806", "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 same bytes16 the cap table was initialized with: 0x plus 32 hex characters (for example 0xb6ca9d9c1daa4b30830b444561ef7806). That is what /app/mint sends. convertBytes16ToUUID only converts 0x-prefixed values into the dashed UUID stored as Mongo _id. A 32-hex string without 0x is stored unchanged and will not match the poller. If you omit id, TAP generates a new UUID and polling breaks.

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