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?
| Situation | Route | What it does |
|---|---|---|
| You have nothing yet and want TAP to deploy the cap table | POST /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/register | Saves 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 0xYourFactoryAddressOr 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/:idandGET /issuer/full/:idreturn the full issuer document.GET /issuer/total-numberreturns 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
- Confirm the response contains
_id,deployed_to, andtx_hash. GET /issuer/id/:id(or/issuer/full/:id) with the returned_idshould succeed.