Overview

An API (Application Programming Interface) is a set of URLs (called endpoints) that allow any user to interact with a system programmatically by sending HTTP requests to access and manage data.
An API Key is a credential used to authenticate and authorize access to APIs.

The APIs described in this guide allow enterprise-grade operations within our system, such as certificate bulk issuance, data retrieval and request management. Any requests made to our system must include an API key in the X-API-Key HTTP header for secure authentication. All our endpoints return data in JSON format.

Create API Keys

1. Log in to HARICA CertManager

Visit HARICA’s CertManager and sign up to create your account. Fill in all the necessary fields.
Your personal information must be accurate and fully matched (letter-by-letter) with a government-issued identification document.

2. Enable Two-Factor Authentication (2FA)

Once you log in, from the top right corner, click on your name and select Profile. From the Account Settings menu, click Enable and follow the on-screen instructions to activate Two-Factor Authentication (2FA) as it is required for granting access to roles and API Keys.

3. Get the appropriate Access Role

After the process is completed, please inform the Enterprise Manager or an already assigned Enterprise Admin of your Enterprise in order to grant you access as an Enterprise Admin or Enterprise Approver.
Specifically, there are three Enterprise Approver roles, which are Enterprise SSL Approver, Enterprise S/MIME Approver and Enterprise Client Auth Approver.

4. Create an API Key

Once you have been assigned a role, select the Profile tab again. Now, you will be able to see the option to create an API key. Click Create to generate your API key.
Please note that each user can create a maximum of 3 API Keys.

Give your API Key a friendly name. Click Create.

Save the code for the API Key.
CAUTION! Please note that, this is the only time you'll be able to view your API Key code. Make sure to copy and save it securely before checking the boxes below.

Requirements for every request

Role

This integration supports only users assigned the Enterprise Admin or Enterprise Approvers (SSL, S/MIME, Client Auth) role.

Base URL

The base URLs, depending on HARICA’s environment, are the following:

Header

Every request requires the X-API-Key HTTP header containing a valid API key (see section Create API Keys).

The POST requests also require the HTTP header Content-Type.
There are two endpoint styles:

  1. Form Data – for file uploads (e.g. CSV for Bulk Issuance) The Content-Type header must have the value multipart/form-data
  2. Boby Data – for actions via structured JSON requests The Content-Type header must have the value application/json

Response

Most responses are provided in JSON format. The only exception is Bulk Issuance where responses are provided in ZIP format.

Path Parameters

The following endpoints support only predefined action values and, where required, predefined type values. Invalid values result in an error.

Bulk Certificate Issuance

Bulk issuance allows creating multiple certificates (of type S/MIME or Client Authentication) in a single request by uploading a CSV file.
The request for bulk issuance is made using the POST method to the API endpoint /cm/v1/bulk/create/{type}

Only users assigned the Enterprise Admin role can access this endpoint.

You must fill in the type path parameter depending on what type of certificates you want to issue. The supported values are smime and clientauth.

For this endpoint the Content-Type header must have the value multipart/form-data.

The required form fields are value and file.
The value field must contain your organization id which can be retrieved from the GET Enterprises endpoint (see below the Get Data section). If your account is associated with multiple enterprises, input the id of the organization on whose behalf you are issuing the certificates.
In the file field you have to submit the csv file containing the necessary information for the certificates.

The response is a zip file containing the certificates. In case of an error, a JSON containing the action outcome (status, error message, etc.) will be returned.

Client Authentication

If you want to issue Client Authentication certificates (clientauth) the submitted csv file should have the following columns:

Column Required Description
CommonName Yes The Common Name (CN) in the certificate's Subject DN
DNSname No DNS Subject Alternative Name (SAN)
FriendlyName Yes Internal label used as the filename of the certificate file inside the returned ZIP archive
OrganizationUnit1 No First Organizational Unit (OU) in the certificate's Subject DN
OrganizationUnit2 No Second Organizational Unit (OU) in the certificate's Subject DN
OrganizationUnit3 No Third Organizational Unit (OU) in the certificate's Subject DN
GivenName No First name of the certificate holder
Surname No Last name of the certificate holder
Email Yes Email address of the certificate holder
PickupPassword No Password used to encrypt the returned PKCS#12 (.p12) file
KeySpec No Key size (RSA): 2048, 3072, 4096
KeyAlg No Key algorithm: RSA or ECDSA
CertType Yes Certificate type: CLIENT_AUTHENTICATION_USER for personal or CLIENT_AUTHENTICATION_MACHINE for device certificates
Duration Yes The certificate validity period in days: 365, 730, or 1095
CSR No -----BEGIN CERTIFICATE REQUEST----- …… -----END CERTIFICATE REQUEST-----

Examples

Client Authentication Bulk Request with no CSR

CSV file (bulk_clientauth.csv):

 
CommonName,DNSname,FriendlyName,OrganizationUnit1,OrganizationUnit2,OrganizationUnit3,GivenName,Surname,Email,PickupPassword,KeySpec,KeyAlg,CertType,Duration,CSR
Test1,,test1,TestOU1,TestOU2,TestOU3,,,test@harica.gr,12345,2048,RSA,client_authentication_machine,365,
test.it.auth.gr,test.it.auth.gr,test2,TestOU4,TestOU5,TestOU6,,,test@harica.gr,12345,2048,RSA,client_authentication_machine,730,
James Smith,,test3,TestOU7,TestOU8,TestOU9,James,Smith,test@harica.gr, 12345,2048,RSA,client_authentication_user,1095,

    

POST Request at /cm/v1/bulk/create/clientauth:

Headers

 
X-API-Key: YourAPIKey 
Content-Type: multipart/form-data
    

Form Fields

 
Value:organizationID
File: [bulk_clientauth.csv]
    

The response is a zip file with name P12Files.zip, containing all the .p12 files with the certificates.

Client Authentication Bulk Request with CSR

CSV file (bulk_clientauth_csr.csv):

 
CommonName,DNSname,FriendlyName,OrganizationUnit1,OrganizationUnit2,OrganizationUnit3,GivenName,Surname,Email,PickupPassword,KeySpec,KeyAlg,CertType,Duration,CSR
Bod Dylan,,test1,TestOU1,TestOU2,TestOU3,Bob,Dylan,test@harica.gr,,,, client_authentication_user,365,"-----BEGIN CERTIFICATE REQUEST-----
MIIDiTCCAfECAQAwRDELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczEPMA0G
...your CSR content here...
-----END CERTIFICATE REQUEST-----"
Test1,,test1,TestOU1,TestOU2,TestOU3,,,test@harica.gr,12345,2048,RSA,client_authentication_machine,1095,"-----BEGIN CERTIFICATE REQUEST-----
...your CSR content here...
-----END CERTIFICATE REQUEST-----"
    

POST Request at /cm/v1/bulk/create/clientauth:

Headers

 
X-API-Key: YourAPIKey 
Content-Type: multipart/form-data
    

Form Fields

 
Value:organizationID
File: [bulk_clientauth_csr.csv]
    

The response is a zip file with name CertificateFiles.zip, containing all the .p7b files with the certificates.

S/MIME

If you want to issue S/MIME certificates (smime) the submitted csv file should have the following columns:

Column Required Description
FriendlyName Yes Internal label used as the filename of the certificate file inside the returned ZIP archive
Email Yes Primary email address of the certificate holder
Email2 No Second email address included as an additional Subject Alternative Name
Email3 No Third email address included as an additional Subject Alternative Name
GivenName No First name of the certificate holder
Surname No Last name of the certificate holder
PickupPassword No Password used to encrypt the returned PKCS#12 (.p12) file
CertType Yes Certificate type: EMAIL_ONLY or NATURAL_LEGAL_LCP
CSR No -----BEGIN CERTIFICATE REQUEST----- …… -----END CERTIFICATE REQUEST-----

Examples

S/MIME Bulk Request with no CSR

CSV file (bulk_smime.csv):

 
FriendlyName,Email,Email2,Email3,GivenName,Surname,PickupPassword,CertType,CSR
test1,test@harica.gr,,,,,12345,email_only,
test2,test@harica.gr,,,John,Smith,12345,natural_legal_lcp,

    

POST Request at /cm/v1/bulk/create/smime:

Headers

 
X-API-Key: YourAPIKey 
Content-Type: multipart/form-data
    

Form Fields

 
Value:organizationID
File: [bulk_smime.csv]
    

The response is a zip file with name P12Files.zip, containing all the .p12 files with the certificates.

S/MIME Bulk Request with CSR

CSV file (bulk_smime_csr.csv):

 
FriendlyName,Email,Email2,Email3,GivenName,Surname,PickupPassword,CertType,CSR
test1,support@harica.gr,,,,,,email_only,"-----BEGIN CERTIFICATE REQUEST-----

...your CSR content here...
-----END CERTIFICATE REQUEST-----"
test11,test@harica.gr,test11@harica.gr,,Bob,Dylan,,natural_legal_lcp,"-----BEGIN CERTIFICATE REQUEST-----
...your CSR content here...
-----END CERTIFICATE REQUEST-----"

    

POST Request at /cm/v1/bulk/create/smime:

Headers

 
X-API-Key: YourAPIKey 
Content-Type: multipart/form-data
    

Form Fields

 
Value:organizationID
File: [bulk_smime_csr.csv]
    

The response is a zip file with name CertificateFiles.zip, containing all the .p7b files with the certificates.

Get Data

Enterprise Approver

You can retrieve requests and certificates for the groups associated with the authenticated enterprise approver.

Get Requests

If you want to get requests of the groups associated with the authenticated enterprise approver, you have to submit a GET request to the API endpoint

/cm/v1/enterprise/requests/{type}

You must fill in the type path parameter depending on what type of requests you want to retrieve. The supported values are ssl, smime and clientauth.

To filter requests by status use the endpoint
/cm/v1/enterprise/requests/{type}/list/{status}

The status path parameter can take the values Pending, Ready, Completed or Cancelled.

You can also filter requests by a specific field using the /cm/v1/enterprise/requests/{type}/{field}/{value} endpoint.

The field path parameter determines the search criterion and the value is the search term.
The available fields for SSL are id and email, while S/MIME and Client Authentication support the fields email, type and user.

The response is a list of JSON objects with the following structure.

 
{
"transactionId": "11591573-ad24-41ce-ad57-54c3f602e5e4"
"transactionTypeName": "SSL OV",// certificate type
"transactionStatus":  "Pending",// current status of the request (pending,
                                                   // ready, completed, cancelled)
"transactionStatusMessage": "Waiting for enterprise approval",
"notes":  null,
"organization": "Example Organization S.A.",
"userEmail": "jsmith@example.com",  // email of the applicant
"userOrganization":  "Example Organization S.A.",  //applicant’s organization
"friendlyName":  "Production Web Certificate",
"reviewedBy": null,
    "requestedAt": "2026-06-01T10:30:00Z",  // when it was submitted
           "isRevoked":  false,   // whether the certificate has been revoked 
    "domains": [
  	{ "name": "example.com", "type": "DNS" },
  	{ "name": "www.example.com", "type": "DNS" }
	],
    "reviews": []
}        
                        

Examples

All pending SSL requests (default)

GET Request at /cm/v1/enterprise/requests/ssl:

Headers

 
X-API-Key: YourAPIKey 
    

All pending SSL requests

GET Request at /cm/v1/enterprise/requests/ssl/list/Pending:

Headers

 
X-API-Key: YourAPIKey 
    

All ready S/MIME requests

GET Request at /cm/v1/enterprise/requests/smime/list/Ready:

Headers

 
X-API-Key: YourAPIKey 
    

All completed Client Authentication requests

GET Request at /cm/v1/enterprise/requests/clientauth/list/Completed:

Headers

 
X-API-Key: YourAPIKey 
    

All cancelled Client Authentication requests

GET Request at /cm/v1/enterprise/requests/clientauth/list/Canceled:

Headers

 
X-API-Key: YourAPIKey 
    

Find SSL request by transaction Id

GET Request at /cm/v1/enterprise/requests/ssl/id/0f7d7ab0-b0ac-4577-bdc9-7c90ce361362:

Headers

 
X-API-Key: YourAPIKey 
    

Filter Client Authentication requests by applicant email

GET Request at /cm/v1/enterprise/requests/clientauth/email/xxxx@auth.gr:

Headers

 
X-API-Key: YourAPIKey 
    

Filter S/MIME requests by transaction type

GET Request at /cm/v1/enterprise/requests/smime/type/OV:

Headers

 
X-API-Key: YourAPIKey 
    

Filter Client Authentication requests by user

GET Request at /cm/v1/enterprise/requests/clientauth/user/xxx:

Headers

 
X-API-Key: YourAPIKey 
    

Get Certificates

If you want to get certificates of the groups associated with the authenticated enterprise approver, you have to submit a GET request to the API endpoint
/cm/v1/enterprise/certificates/{type}

You must fill in the type path parameter depending on what type of certificates you want to retrieve. The supported values are ssl, smime and clientauth.

To filter requests by status use the endpoint
/cm/v1/enterprise/certificates/{type}/list/{status}

The status path parameter can take the values Valid, Revoked or Expired.

You can also filter requests by a specific field using the /cm/v1/enterprise/certificates/{type}/{field}/{value} endpoint.

The field path parameter determines the search criterion and the value is the search term. The available fields are email, type and user.

The type value refers to the certificate type (transactionTypeName).
It will return only certificates with status Valid.

The response is a list of JSON objects.

Examples

All valid S/MIME certificates (default)

GET Request at /cm/v1/enterprise/certificates/smime:

Headers

 
X-API-Key: YourAPIKey 
    

All revoked SSL certificates

GET Request at /cm/v1/enterprise/certificates/ssl/list/Revoked:

Headers

 
X-API-Key: YourAPIKey 
    

All expired Client Authentication

GET Request at /cm/v1/enterprise/certificates/clientauth/list/Expired:

Headers

 
X-API-Key: YourAPIKey 
    

Filter valid S/MIME certificates by certificate owner’s email

GET Request at /cm/v1/enterprise/certificates/smime/email/test@example.com:

Headers

 
X-API-Key: YourAPIKey 
    

Filter valid SSL certificates by certificate type

GET Request at /cm/v1/enterprise/certificates/ssl/type/SSL DV:

Headers

 
X-API-Key: YourAPIKey 
    

Filter valid Client Authentication certificates by certificate type

GET Request at /cm/v1/enterprise/certificates/clientauth/type/IGTF Personal:

Headers

 
X-API-Key: YourAPIKey 
    

Filter valid S/MIME certificates by certificate type

GET Request at /cm/v1/enterprise/certificates/smime/type/IV:

Headers

 
X-API-Key: YourAPIKey 
    

Filter valid Client Authentication certificates by user

GET Request at /cm/v1/enterprise/certificates/clientauth/user/xxxx:

Headers

 
X-API-Key: YourAPIKey 
    

Enterprise Admin

You can retrieve enterprises, users and certificates for the groups associated with the authenticated enterprise admin.

Get Enterprises

If you want to get the organizations associated with your account, you have to submit a GET request to the API endpoint
/cm/v1/admin/enterprises

No filtering is available for this endpoint.

The response is a list of JSON objects with the following structure.

 
{
  "organizationId":"c00f50b8-f375-437a-bf02-f18ecd8dea71"
  "domain":  "otc.edu.om",
  "organization":   " Oman Tourism College (OTC)",
  "organizationLocalized":  "",
  "country":  "OM", 
  "state": "Muscat",
  "stateLocalized":  "", 
  "locality": "Muscat",
  "localityLocalized":   "",
  "organizationalUnit":  "",
  "organizationalUnitLocalized":   null,
  "dn": ""O= Oman Tourism College (OTC), ST=Muscat, L=Muscat, C=OM",
  "validity":   "2025-01-20T07:06:31.258682",
  "groupId":   "04eb0384-8b60-45f3-bfae-5d09e65e9749",
  "organizationIdentifier":    null,
  "validityOV":   "2025-01-20T07:06:31.258682",
  "validityEV":   "2025-01-20T07:06:31.258684",
  "jurisdictionCountry":    null,
  "jurisdictionState":   null,
  "jurisdictionLocality":    null,
  "businessCategory":    null,
  "serial":   null,
  "groupDomains":    "otc.edu.om"
}        
                        

Example

All enterprises

GET Request at /cm/v1/admin/enterprises:

Headers

 
X-API-Key: YourAPIKey 
    

Get Users

If you want to get the users belonging to the groups of the authenticated enterprise admin, you have to submit a GET request to the API endpoint /cm/v1/admin/users

You can also filter users by a specific field using the /cm/v1/admin/users/{field}/{value} endpoint.

The field path parameter determines the search criterion and the value is the search term. The available field is email.

The response is a list of JSON objects with the following structure.

 
{
  "fullName": "Firstname Lastname",
  "email":   "xxxxxx@example.gr",
  "organization":  "Aristotle University of Thessaloniki",
  "role":   "User",
  "creationDateTime":   "2021-09-22T09:27:47.54207", 
  "groups":  "",
  "id":  "65f0f149-2fa8-4125-b3c8-f010b712d7bf",
  "enabled2FA": false,
  "isEmailConfirmed":    true,
  "givenName":  null,
  ""surname":    null,
}        
                        

Examples

All users (no filter)

GET Request at /cm/v1/admin/users:

Headers

 
X-API-Key: YourAPIKey 
    

Filter users by email

GET Request at /cm/v1/admin/users/email/xxxx@example.com:

Headers

 
X-API-Key: YourAPIKey 
    

Get Certificates

If you want to get certificates belonging to the groups of the authenticated enterprise admin, you have to submit a GET request to the API endpoint /cm/v1/admin/certificates

To filter requests by status use the endpoint /cm/v1/admin/certificates/list/{status}

The status path parameter can take the values Valid, Revokedor Expired. Defaults to status Valid when no filter is specified.

You can also filter valid certificates by a specific field using the /cm/v1/admin/certificates/{field}/{value} endpoint.

The field path parameter determines the search criterion and the value is the search term. The available fields are serial, email and type.

The type value refers to the certificate type (transactionTypeName)

It will return only certificates with status Valid.

The response is a list of JSON objects.

Examples

All valid certificates (default)

GET Request at /cm/v1/admin/certificates:

Headers

 
X-API-Key: YourAPIKey 
    

All revoked certificates

GET Request at /cm/v1/admin/certificates/list/Revoked::

Headers

 
X-API-Key: YourAPIKey 
    

All expired certificates

GET Request at /cm/v1/admin/certificates/list/Expired:

Headers

 
X-API-Key: YourAPIKey 
    

Filter valid certificates by serial number

GET Request at
/cm/v1/admin/certificates/serial/2E27C1FF188A76FC6B07CF2AE28754EF:

Headers

 
X-API-Key: YourAPIKey 
    

Filter valid certificates by certificate owner’s email

GET Request at /cm/v1/admin/certificates/email/test@example.com:

Headers

 
X-API-Key: YourAPIKey 
    

Filter valid certificates by certificate type

GET Request at /cm/v1/admin/certificates/type/Client Authentication Machine:

Headers

 
X-API-Key: YourAPIKey 
    

Filter valid certificates by certificate type

(when searching for type: S/MIME email-only)

GET Request at /cm/v1/admin/certificates/type/MIME email-only:

Headers

 
X-API-Key: YourAPIKey 
    

Post Data

Enterprise Approver

If you want to accept, cancel or revoke a certificate, you have to submit a POST request to the API endpoint /cm/v1/enterprise/{action}/{type}

You must fill in the type path parameter depending on what type of certificate you want to take action on. The supported values are ssl, smime and clientauth.

In order for the request to be successful you have to be assigned the appropriate role. For example, if you only have the role of an Enterprise SSL Approver you cannot take any action on S/MIME or Client Authentication certificates.

For this endpoint the Content-Type header must have the value application/json.

The action path parameter supports the values accept, cancel or revoke.

You can only accept or cancel requests with a Pending status.

Accept

If you want to accept a request you must submit a JSON with the corresponding transaction id. If your certificate type is SSL then you must also provide a message.

For type value clientauth or smime:

 
 {
  "transactionId":  "0f7d7ab0-b0ac-4577-bdc9-7c90ce361362"
 }
    

For type value ssl:

 
 {
  "transactionId":  "0f7d7ab0-b0ac-4577-bdc9-7c90ce361362",
  "message": "..."
 }
    

Examples

Accept a SSL request

POST Request at /cm/v1/enterprise/accept/ssl:

Headers

 
X-API-Key: YourAPIKey 
Content-Type:  application/json
    

Body Parameter

 
 {
  "transactionId": "0f7d7ab0-b0ac-4577-bdc9-7c90ce361362",
  "message":  "write here a message"
 }
    

Accept a S/MIME request

POST Request at /cm/v1/enterprise/accept/smime:

Headers

 
X-API-Key: YourAPIKey 
Content-Type:  application/json
    

Body Parameter

 
"transactionId": "0f7d7ab0-b0ac-4577-bdc9-7c90ce361362",
    

Cancel

If you want to cancel a request you must provide a json with the corresponding transaction id and a message.
If you want the user that issued the certificate to be informed of its cancellation, you must include the informUser key in the JSON. This key is optional and accepts either true or false.

 
 {
  "transactionId":  "0f7d7ab0-b0ac-4577-bdc9-7c90ce361362",
  "message":   "...",
  "informUser":    true
 }
    

Examples

Cancel a SSL request

POST Request at /cm/v1/enterprise/cancel/ssl:

Headers

 
X-API-Key: YourAPIKey 
Content-Type:  application/json
    

Body Parameter

 
 {
  "transactionId": "0f7d7ab0-b0ac-4577-bdc9-7c90ce361362",,
  "message":  "write here a message"
  "informUser":  false
 }
    

Cancel a Client Authentication request

POST Request at /cm/v1/enterprise/cancel/clientauth:

Headers

 
X-API-Key: YourAPIKey 
Content-Type:  application/json
    

Body Parameter

 
 {
  "transactionId": "0fad5685-edac-4ac6-8da2-e2753e5afef2",
  "message":  "write here a message"
  "informUser":  true
 }
    

Revoke

If you want to revoke a certificate you must submit a JSON with the corresponding transaction id, a message and a value.

 
 {
  "transactionId":  "0f7d7ab0-b0ac-4577-bdc9-7c90ce361362",
  "message":   "...",
  "value":    "4.9.1.1.1.1"   //unspecified
 }
    

The value key takes should contain the code associated with the relevant revocation reason. Since the list of revocation reason codes is not yet available, use the code shown in the example above.

Examples

Revoke a Client Authentication certificate

POST Request at /cm/v1/enterprise/revoke/clientauth:

Headers

 
X-API-Key: YourAPIKey 
Content-Type:  application/json
    

Body Parameter

 
 {
  "transactionId": "0fad5685-edac-4ac6-8da2-e2753e5afef2",
  "message":  "write here a message"
  "value":   "4.9.1.1.1.1"
 }
    

Revoke a S/MIME certificate

POST Request at /cm/v1/enterprise/revoke/smime:

Headers

 
X-API-Key: YourAPIKey 
Content-Type:  application/json
    

Body Parameter

 
 {
  "transactionId": "9c13a3db-80a3-4a01-afbf-fcbf6fa02822",
  "message":  "write here a message"
  "value": "4.9.1.1.1.1"e
 }
    

Enterprise Admin

If you want to revoke a certificate you have to submit a POST request to the API endpoint /cm/v1/admin/revoke/{type}

An Enterprise Admin cannot accept or cancel a request.

You must fill in the type path parameter depending on what type of certificate you want to take action on. The supported values are single, bulk and acme.

In the request body you must provide a json with the corresponding transaction id, a message and a value.

 
 {
  "transactionId":  "0f7d7ab0-b0ac-4577-bdc9-7c90ce361362",
  "message":   "...",
  "value":    "4.9.1.1.1.1"    //unspecified
 }
    

The value key takes should contain the code associated with the relevant revocation reason. Since the list of revocation reason codes is not yet available, use the code shown in the example above.

Examples

Revoke a S/MIME certificate

POST Request at /cm/v1/admin/revoke/smime:

Headers

 
X-API-Key: YourAPIKey 
Content-Type:  application/json
    

Body Parameter

 
 }
  "transactionId": "9c13a3db-80a3-4a01-afbf-fcbf6fa02822",
  "message":  "write here a message"
  "value":   "4.9.1.1.1.1"
 }
    

Revoke a SSL certificate

POST Request at /cm/v1/admin/revoke/ssl:

Headers

 
X-API-Key: YourAPIKey 
Content-Type:  application/json
    

Body Parameter

 
 }
  "transactionId": "0f7d7ab0-b0ac-4577-bdc9-7c90ce361362",
  "message":  "write here a message"
  "value": "4.9.1.1.1.1"
 }