API ReferenceSAML (IdP)
Certificates
Generate, activate, and revoke SAML signing certificates.
RPCs
| Method | Path |
|---|---|
| ListCertificates | GET /v1/saml/certificates |
| GenerateCertificate | POST /v1/saml/certificates:generate |
| ActivateCertificate | POST /v1/saml/certificates/{id}:activate |
| RevokeCertificate | POST /v1/saml/certificates/{id}:revoke |
Base URL: https://<Domain id="api"/>
Authentication: Bearer token with saml_idp:write.
Rotation workflow
Generatea new certificate -- it starts inactive.- Download the public part and share it with your SPs (update their IdP metadata).
- Once all SPs have the new cert,
Activateit. This switches signing to the new cert atomically. - Keep the old cert alive until you've confirmed every SP has rotated, then
Revokeit.
Generate a new cert
const res = await fetch(
"https://api-id.avnology.net/v1/saml/certificates:generate",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AVNOLOGY_API_KEY}`,
"Content-Type"
body := strings.NewReader(`{"key_size":3072,"validity_days":730}`)
req, _ := http.NewRequest("POST",
"https://api-id.avnology.net/v1/saml/certificates:generate", body)import httpx, os
httpx.post(
"https://api-id.avnology.net/v1/saml/certificates:generate",
json={"key_size": 3072, "validity_days": 730},
headers={"Authorization"
const res = await fetch(
"https://api-id.avnology.net/v1/saml/certificates:generate",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AVNOLOGY_API_KEY}`,
"Content-Type"
body := strings.NewReader(`{"key_size":3072,"validity_days":730}`)
req, _ := http.NewRequest("POST",
"https://api-id.avnology.net/v1/saml/certificates:generate", body)import httpx, os
httpx.post(
"https://api-id.avnology.net/v1/saml/certificates:generate",
json={"key_size": 3072, "validity_days": 730},
headers={"Authorization"
const res = await fetch(
"https://api-id.avnology.net/v1/saml/certificates:generate",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AVNOLOGY_API_KEY}`,
"Content-Type"
body := strings.NewReader(`{"key_size":3072,"validity_days":730}`)
req, _ := http.NewRequest("POST",
"https://api-id.avnology.net/v1/saml/certificates:generate", body)import httpx, os
httpx.post(
"https://api-id.avnology.net/v1/saml/certificates:generate",
json={"key_size": 3072, "validity_days": 730},
headers={"Authorization"
const res = await fetch(
"https://api-id.avnology.net/v1/saml/certificates:generate",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AVNOLOGY_API_KEY}`,
"Content-Type"
body := strings.NewReader(`{"key_size":3072,"validity_days":730}`)
req, _ := http.NewRequest("POST",
"https://api-id.avnology.net/v1/saml/certificates:generate", body)import httpx, os
httpx.post(
"https://api-id.avnology.net/v1/saml/certificates:generate",
json={"key_size": 3072, "validity_days": 730},
headers={"Authorization"
Response (201 Created)
{
"id": "smlc_01H7X3K9Q1",
"x509_pem": "-----BEGIN CERTIFICATE-----\nMIIDXT...\n-----END CERTIFICATE-----\n",
"algorithm": "RSA",
"key_size": 3072,
"not_before": "2026-04-17T12:00:00Z",
"not_after": "2028-04-17T12:00:00Z",
"active": false