> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://api.docs.modulards.com/modular-ds-public-api/security-health/certificates/retrieve-a-website-s-certificate/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://api.docs.modulards.com/_mcp/server. # Retrieve a website's certificate GET https://api.modulards.com/api/public/v1/sites/{site}/certificate Returns the summary of a website's SSL certificate: whether certificate monitoring is set up, its status, who issued it, the dates it is valid between and how many days are left (negative once it has expired). Use it to spot certificates that are about to expire. A website without certificate monitoring answers 200 with `configured` set to `false` and every other detail empty. This request takes no query parameters: any parameter answers 422. Your role must be allowed to see certificates; without it the request answers 404. Reference: https://api.docs.modulards.com/modular-ds-public-api/security-health/certificates/retrieve-a-website-s-certificate ## Authentication - `Authorization` header (bearer token, required) — Personal access token created in the Modular DS dashboard; read-only tokens can only call GET endpoints. ## Request ### Path parameters - `site` (string, required) ## Response ### 200 200 - Certificate - `data` (ApiPublicV1SitesSiteCertificateGetResponsesContentApplicationJsonSchemaData, optional) - `jsonapi` (ApiPublicV1SitesSiteCertificateGetResponsesContentApplicationJsonSchemaJsonapi, optional) ## Types ### ApiPublicV1SitesSiteCertificateGetResponsesContentApplicationJsonSchemaData - `attributes` (ApiPublicV1SitesSiteCertificateGetResponsesContentApplicationJsonSchemaDataAttributes, optional) - `id` (string, optional) - `links` (ApiPublicV1SitesSiteCertificateGetResponsesContentApplicationJsonSchemaDataLinks, optional) - `type` (string, optional) ### ApiPublicV1SitesSiteCertificateGetResponsesContentApplicationJsonSchemaJsonapi - `version` (string, optional) ### ApiPublicV1SitesSiteCertificateGetResponsesContentApplicationJsonSchemaDataAttributes - `configured` (boolean, optional) - `days_until_expiry` (double, optional) - `enabled` (boolean, optional) - `issuer` (ApiPublicV1SitesSiteCertificateGetResponsesContentApplicationJsonSchemaDataAttributesIssuer, optional) - `protocol` (string, optional) - `sans` (list of string, optional) - `ssl_status` (string, optional) - `subject` (ApiPublicV1SitesSiteCertificateGetResponsesContentApplicationJsonSchemaDataAttributesSubject, optional) - `valid_from` (string, optional) - `valid_to` (string, optional) ### ApiPublicV1SitesSiteCertificateGetResponsesContentApplicationJsonSchemaDataLinks - `self` (string, optional) ### ApiPublicV1SitesSiteCertificateGetResponsesContentApplicationJsonSchemaDataAttributesIssuer - `c` (string, optional) - `cn` (string, optional) - `o` (string, optional) - `ou` (any, optional, nullable) ### ApiPublicV1SitesSiteCertificateGetResponsesContentApplicationJsonSchemaDataAttributesSubject - `c` (any, optional, nullable) - `cn` (string, optional) - `o` (any, optional, nullable) - `ou` (any, optional, nullable) ## Examples **Response** ```json { "data": { "attributes": { "configured": true, "days_until_expiry": 39, "enabled": true, "issuer": { "c": "US", "cn": "R11", "o": "Let's Encrypt", "ou": null }, "protocol": "TLSv1.3", "sans": [ "acme-corp.com", "www.acme-corp.com" ], "ssl_status": "up", "subject": { "c": null, "cn": "acme-corp.com", "o": null, "ou": null }, "valid_from": "2026-08-01 00:00:00", "valid_to": "2026-10-30 12:00:00" }, "id": "101", "links": { "self": "https://api.modulards.com/api/public/v1/sites/101/certificate" }, "type": "site-certificates" }, "jsonapi": { "version": "1.1" } } ``` **SDK Code** ```python 200 - Certificate import requests url = "https://api.modulards.com/api/public/v1/sites/site/certificate" headers = {"Authorization": "Bearer "} response = requests.get(url, headers=headers) print(response.json()) ``` ```javascript 200 - Certificate const url = 'https://api.modulards.com/api/public/v1/sites/site/certificate'; const options = {method: 'GET', headers: {Authorization: 'Bearer '}}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go 200 - Certificate package main import ( "fmt" "net/http" "io" ) func main() { url := "https://api.modulards.com/api/public/v1/sites/site/certificate" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("Authorization", "Bearer ") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby 200 - Certificate require 'uri' require 'net/http' url = URI("https://api.modulards.com/api/public/v1/sites/site/certificate") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["Authorization"] = 'Bearer ' response = http.request(request) puts response.read_body ``` ```java 200 - Certificate import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://api.modulards.com/api/public/v1/sites/site/certificate") .header("Authorization", "Bearer ") .asString(); ``` ```php 200 - Certificate request('GET', 'https://api.modulards.com/api/public/v1/sites/site/certificate', [ 'headers' => [ 'Authorization' => 'Bearer ', ], ]); echo $response->getBody(); ``` ```csharp 200 - Certificate using RestSharp; var client = new RestClient("https://api.modulards.com/api/public/v1/sites/site/certificate"); var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Bearer "); IRestResponse response = client.Execute(request); ``` ```swift 200 - Certificate import Foundation let headers = ["Authorization": "Bearer "] let request = NSMutableURLRequest(url: NSURL(string: "https://api.modulards.com/api/public/v1/sites/site/certificate")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```