/api/v1/businesses/:businessId/locations/:locationId/certificates
auth: jwt (administrator | update_taxcore_credentials)List all Certificates registered against a Location. Returns the PUBLIC projection — VSDC credentials (PFX filename, password, PAC) are stripped; `hasCertificate: boolean` indicates cert presence.
handlers: CertificatesController.list
| name | required | default | description |
|---|---|---|---|
businessId pathuuid | yes | — | Target business UUID. |
locationId pathuuid | yes | — | Parent Location UUID. |
APIResponseDataList<PublicCertificateDTO>/api/v1/businesses/:businessId/locations/:locationId/certificates
auth: jwt (administrator | update_taxcore_credentials)Upload a new V-SDC certificate for a Location. multipart/form-data: PFX file + password + PAC + UID. The server RC2→3DES-converts the PFX, verifies the PAC against V-SDC /status, cross-checks UID against status.uid, writes the file under CERT_STORAGE_DIR/{uuid}.pfx, and persists a Certificates row. PFX bytes are cleaned up if persistence fails. PFX file max 5 MB.
handlers: CertificatesController.create
| name | required | default | description |
|---|---|---|---|
businessId pathuuid | yes | — | Target business UUID. |
locationId pathuuid | yes | — | Parent Location UUID — validated against the business. |
file bodymultipart .pfx | yes | — | PFX certificate (max 5 MB). RC2-40-CBC accepted; normalised to 3DES on write. |
password bodystring | yes | — | PFX passphrase. Stored AES-256-GCM encrypted. |
pac bodystring | yes | — | PAC issued by TaxCore. Verified against V-SDC /status before persistence. |
uid bodystring | yes | — | 8-character uppercase alphanumeric UID. Cross-checked against status.uid. |
name bodystring | no | — | Optional certificate display name. Falls back to the parent Location's name when blank. |
APIResponseDataObject<PublicCertificateDTO>APIErrorAPIErrorAPIErrorAPIError/api/v1/businesses/:businessId/locations/:locationId/certificates/:certificateId
auth: jwt (administrator | update_taxcore_credentials)Fetch a single Certificate (public projection — credential fields stripped).
handlers: CertificatesController.getById
| name | required | default | description |
|---|---|---|---|
businessId pathuuid | yes | — | Target business UUID. |
locationId pathuuid | yes | — | Parent Location UUID. |
certificateId pathuuid | yes | — | Target Certificate UUID. |
APIResponseDataObject<PublicCertificateDTO>APIError/api/v1/businesses/:businessId/locations/:locationId/certificates/:certificateId
auth: jwt (administrator | update_taxcore_credentials)Patch a Certificate's metadata — name and/or status (active|revoked). Re-activating (status='active') is rejected with 409 CERTIFICATE_LOCATION_ALREADY_ACTIVE when the Location already holds another active certificate: one active certificate per Location.
handlers: CertificatesController.update
| name | required | default | description |
|---|---|---|---|
businessId pathuuid | yes | — | Target business UUID. |
locationId pathuuid | yes | — | Parent Location UUID. |
certificateId pathuuid | yes | — | Target Certificate UUID. |
name bodystring | no | — | Updated display name (min 1 char). |
status body'active' | 'revoked' | no | — | Revocation toggle. |
APIResponseDataObject<PublicCertificateDTO>APIErrorAPIError/api/v1/businesses/:businessId/locations/:locationId/certificates/:certificateId/revoke
auth: jwt (administrator | update_taxcore_credentials)Revoke a Certificate (sets Status='revoked'). Convenience action — equivalent to PATCH with status='revoked'.
handlers: CertificatesController.revoke
| name | required | default | description |
|---|---|---|---|
businessId pathuuid | yes | — | Target business UUID. |
locationId pathuuid | yes | — | Parent Location UUID. |
certificateId pathuuid | yes | — | Target Certificate UUID. |
APIResponseDataObject<PublicCertificateDTO>APIError/api/v1/businesses/:businessId/locations/:locationId/certificates/:certificateId
auth: jwt (administrator | update_taxcore_credentials)Delete a Certificate. Removes the DB row and unlinks the PFX file from CERT_STORAGE_DIR (fire-and-forget; unlink errors swallowed).
handlers: CertificatesController.remove
| name | required | default | description |
|---|---|---|---|
businessId pathuuid | yes | — | Target business UUID. |
locationId pathuuid | yes | — | Parent Location UUID. |
certificateId pathuuid | yes | — | Target Certificate UUID. |
voidAPIError