Go to Production
A checklist for the day you switch from test recipients to real ones. Each line links to the page that covers it.
Switch from staging to production
Staging and production are separate networks β nothing carries over automatically (see What Carries Over). Do these in order:
Staging β Production mapping
Network API
https://staging.network.learncard.com/trpc
https://network.learncard.com/trpc
Profile
Profile created on staging
New profile β same seed, same did:key
API tokens
Staging AuthGrant + token
New AuthGrant + token, same scopes
Signing authority
Registered on staging
Must be re-registered on production
Credential templates
lc:network:staging.network.learncard.com/β¦
New URIs β lc:network:network.learncard.com/β¦
ConsentFlow contracts
Contract created on staging
New contract created on production
Webhook URL(s)
Points at your staging/test listener
Must point at your production listener
Issued credentials
Only exist and are claimable on staging
Independent β nothing from staging carries over
When a send fails ambiguously
A network error or timeout from send() doesn't tell you whether the credential was actually issued before the connection dropped. Before retrying:
Check the response first. If you got a response back with
activityId, it succeeded β don't retry.learncard status <activityId>(orgetActivityChain) shows where it got to.If the call threw or timed out, look for an existing issuance before retrying:
Profile/DID recipients β
getPaginatedBoostRecipients(templateUri)and check whether your recipient is already in the list.Email/phone recipients β
learnCard.invoke.getMySentInboxCredentials({ query: { boostUri: templateUri, currentStatus: 'PENDING' } })and check whether an issuance already addresses that contact method.
Only retry if neither check finds an existing record.
Store inbox.issuanceId (and activityId) keyed by your own record ID at send time, and key your webhook processing on issuanceId β it stays stable even if you end up sending twice.
TOO_MANY_REQUESTS (429) is always safe to retry with backoff β the request was rejected before anything was issued. A 5xx or timeout is not automatically safe: the request may have already been fully processed on the server before the response was lost. See Errors & Limits.
Security
Reliability
Trust
Support
When every box is checked, follow Switch from Staging to Production above, then send to real recipients.
Last updated
Was this helpful?