curl --request POST \ --url 'https://api.e2enetworks.com/myaccount/api/v1/gpu/gateway/certificates/?project_id=<PROJECT_ID>&location=<LOCATION>&apikey=<API_KEY>' \ --header 'Authorization: Bearer <API_TOKEN>' \ --header 'Content-Type: application/json' \ --data '{ "name": "example-cert", "cert_chain": "-----BEGIN CERTIFICATE-----\nMIIB...\n-----END CERTIFICATE-----\n", "private_key": "-----BEGIN PRIVATE KEY-----\nMIIE...\n-----END PRIVATE KEY-----\n"}'import requests
response = requests.post( "https://api.e2enetworks.com/myaccount/api/v1/gpu/gateway/certificates/", params={"project_id": "<PROJECT_ID>", "location": "<LOCATION>", "apikey": "<API_KEY>"}, headers={"Authorization": "Bearer <API_TOKEN>"}, json={ "name": "example-cert", "cert_chain": "-----BEGIN CERTIFICATE-----\nMIIB...\n-----END CERTIFICATE-----\n", "private_key": "-----BEGIN PRIVATE KEY-----\nMIIE...\n-----END PRIVATE KEY-----\n", },)print(response.json())const url = new URL("https://api.e2enetworks.com/myaccount/api/v1/gpu/gateway/certificates/");url.search = new URLSearchParams({ project_id: "<PROJECT_ID>", location: "<LOCATION>", apikey: "<API_KEY>" });
const response = await fetch(url, { method: "POST", headers: { "Authorization": "Bearer <API_TOKEN>", "Content-Type": "application/json" }, body: JSON.stringify({ "name": "example-cert", "cert_chain": "-----BEGIN CERTIFICATE-----\nMIIB...\n-----END CERTIFICATE-----\n", "private_key": "-----BEGIN PRIVATE KEY-----\nMIIE...\n-----END PRIVATE KEY-----\n" }),});console.log(await response.json());Adds a Certificate you bring: a chain in PEM text, your certificate first and then each issuer, with its private key. The pair is checked before it is saved: the key must match the certificate, be unencrypted and strong enough (RSA 2048 bits or more, EC 256 bits or more), the certificate must not have expired and the chain must be in order and include the intermediates. Adding a Certificate changes no Load Balancer. Needs the Create permission for Load Balancers.
Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Project ID
Active IAM ID (To access contact person account) Find your Active IAM ID here
Location
Request Bodyrequired
Section titled “Request Bodyrequired”object
The Certificate’s name, up to 255 characters, not used by another Certificate of the project.
Example
example-certThe chain as PEM text: your certificate first, then each issuer above it.
Example
-----BEGIN CERTIFICATE-----MIIB...-----END CERTIFICATE-----The certificate’s private key as PEM text, not protected by a passphrase. It is never returned.
Example
-----BEGIN PRIVATE KEY-----MIIE...-----END PRIVATE KEY-----Responses
Section titled “Responses”The Certificate that was added
object
object
The Certificate’s name.
UPLOADED for one you added. ACME and PLATFORM are Certificates E2E manages for you.
Active, Pending or Expired.
The certificate chain you uploaded, as PEM text. Empty for a Certificate E2E manages.
The names the certificate covers, read from the certificate.
Start of the validity period.
End of the validity period.
Who issued the certificate, read from the certificate.
The key’s type and size, for example RSA-2048 or EC-secp256r1.
SHA-256 fingerprint of the first certificate.
Whole days until not_after; negative once it has passed. null when there is no end date.
true once not_after has passed.
IDs of the Load Balancers that use the Certificate.
Who created it.
object
object
Example
{ "code": 201, "message": "Created Successfully", "data": { "id": 5, "name": "example-cert", "source": "UPLOADED", "status": "Active", "cert_chain": "-----BEGIN CERTIFICATE-----\nMIIB...\n-----END CERTIFICATE-----\n", "domains": [ "example.com" ], "not_before": "2026-09-01T00:00:00Z", "not_after": "2026-12-01T00:00:00Z", "issuer": "CN=Example CA,O=Example", "key_type": "RSA-2048", "fingerprint": "9f2c4b7a1d0e5c3b8a6f4e2d1c0b9a8f7e6d5c4b3a291807f6e5d4c3b2a19087", "days_remaining": 37, "is_expired": false, "in_use_by": [ 42 ], "created_by": { "id": 101, "name": "A User", "email": "user@example.com", "username": "auser" }, "created_at": "2026-10-21T11:17:29Z", "updated_at": "2026-10-21T11:17:29Z" }, "errors": {}}The upload was refused. errors is an object keyed by field, each holding a list of messages. Under cert_chain: “A certificate is required.”, “Could not read the certificate. Expected PEM text beginning with ‘—–BEGIN CERTIFICATE—–’.”, “This certificate has already expired.”, “Key is too small. Minimum is <2048 for RSA, 256 for EC> bits.”, “Certificate chain is out of order. Put your certificate first, then each issuer above it.”, “Intermediate certificate(s) are missing. Append the issuer chain supplied by your CA, or some clients will reject the connection.”. Under private_key: “A private key is required.”, “Could not read the private key. Expected PEM text beginning with ‘—–BEGIN … PRIVATE KEY—–’.”, “This private key does not belong to this certificate.”, “This private key is passphrase-protected. Upload a decrypted key.”. For a name already used (the name of a deleted Certificate counts as used) errors says the name is taken. Otherwise “Failed to save the certificate. Please try again later.” The same 400 is returned, with the project’s own text, when project_id is missing or not a number.
object
object
object
Example
{ "code": 400, "message": "Bad Request", "data": {}, "errors": { "private_key": [ "A private key is required." ] }}