{"openapi":"3.1.0","info":{"title":"CSR API","version":"1.0.0","description":"Generate and parse X.509 Certificate Signing Requests (PKCS#10) — the CSRs you submit to a Certificate Authority to obtain a TLS certificate. Generate a CSR from a common name plus optional organisation, country, locality and Subject Alternative Names, and get back the CSR together with a freshly-generated RSA private key (2048/3072/4096). Or parse an existing CSR to read its subject, SANs, key size and whether its signature is valid. Pure local processing — no key, no third-party service. Note: for development and testing; keep production private keys offline. Live, nothing stored. 3 endpoints. Distinct from key-pair generation, certificate decoding and live SSL checks.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/csr-api","description":"oanor gateway"}],"tags":[{"name":"CSR"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/generate":{"get":{"operationId":"get_v1_generate","tags":["CSR"],"summary":"Generate a CSR + private key","description":"","parameters":[{"name":"common_name","in":"query","required":true,"description":"Common name (domain)","schema":{"type":"string"},"example":"example.oanor.com"},{"name":"org","in":"query","required":false,"description":"Organisation","schema":{"type":"string"},"example":"oanor"},{"name":"country","in":"query","required":false,"description":"2-letter country","schema":{"type":"string"},"example":"DE"},{"name":"san","in":"query","required":false,"description":"Comma-separated SANs","schema":{"type":"string"},"example":"example.oanor.com,www.example.oanor.com"},{"name":"bits","in":"query","required":false,"description":"RSA bits 2048|3072|4096","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"csr":"-----BEGIN CERTIFICATE REQUEST-----\r\nMIICxDCCAawCAQAwOTEaMBgGA1UEAxMRZXhhbXBsZS5vYW5vci5jb20xCzAJBgNV\r\nBAYTAkRFMQ4wDAYDVQQKEwVvYW5vcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC\r\nAQoCggEBAOP1i2LVX31aSiSw+AggIb7UyHBYctldSsqVuMbzYJmp1x8EozR6r8hT\r\nQvUWe4fEv2dWTl7Ao6Op8garZ7Q4J2ag7YSqER69/ud8uAF8ou9s+vhzJKhjSbKn\r\nGOZysEy91BdP6A6KaLti88IeewYBrN9MqN4jUJeGKFf2M0jLgjPj5Y4cS3QP5uyr\r\nWYWHPm7VaFTBFUd0KFQknWMaApZ+5H7HwLKFEO20C7VcZqGA07XoTSw3v1fCTrRi\r\nTME0AJRlzRFfHtwPNTLX1/ipYhcaSM3rg1XvkNG7XRVmAceK7r2zfAMgy9dZdo4p\r\n5kNKTjIpsFJq5i9hEcK5+wGGJrUooWcCAwEAAaBGMEQGCSqGSIb3DQEJDjE3MDUw\r\nMwYDVR0RBCwwKoIRZXhhbXBsZS5vYW5vci5jb22CFXd3dy5leGFtcGxlLm9hbm9y\r\nLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAcOJchKBQ4tgZh9HQSLfWHEO3wqO/uzD/\r\nrHqzap1KKwEZW8WDVqI7NIMY9ASIdBtgboreAMzzVDjmpTEmlknyOEnw1+5E31yf\r\n44HMdlNbTo++AeS/yq3ZGL/0n8uKddXydIB5h+tnwCgkbo5tO5U7y0dSfGZaXhws\r\nkicoYJrMAKmFE7m9l5z9h9cwq9xiGvwp+BV7aS0AD7wARdueyXuZVhS8toH2xBQZ\r\nmDtv6ym28H2BsnSTvDGjWZLZKYuoAocBEEBDCVe0XAWEdbQcwohAHMjS0qvzms+w\r\nqNK9z+vMi+cqLnafNg+2TNCRAnFJdQjrGVCoVHs7PTK/Urp93RPxnA==\r\n-----END CERTIFICATE REQUEST-----\r\n","note":"For development/testing — keep production private keys offline.","key_bits":2048,"common_name":"example.oanor.com","private_key":"-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDj9Yti1V99Wkok\nsPgIICG+1MhwWHLZXUrKlbjG82CZqdcfBKM0eq/IU0L1FnuHxL9nVk5ewKOjqfIG\nq2e0OCdmoO2EqhEevf7nfLgBfKLvbPr4cySoY0mypxjmcrBMvdQXT+gOimi7YvPC\nHnsGAazfTKjeI1CXhihX9jNIy4Iz4+WOHEt0D+bsq1mFhz5u1WhUwRVHdChUJJ1j\nGgKWfuR+x8CyhRDttAu1XGahgNO16E0sN79Xwk60YkzBNACUZc0RXx7cDzUy19f4\nqWIXGkjN64NV75DRu10VZgHHiu69s3wDIMvXWXaOKeZDSk4yKbBSauYvYRHCufsB\nhia1KKFnAgMBAAECggEAAkQ368M9vQKGAWT8PyIJDXUSirUDOOoJvlRMXARup3IR\nQEh/67VBXiqFwrR2648NoCD/8noHDOK5rbTlxdyKqvIndzQ03pHHbdT6apL33VpZ\nPHMlbPWS9Zwq55x1G3sGF50+kpzWe1Z5ufcq0Sp4sr4RlI1uIoBXXyVRgtD5k6Gu\nbNUUP1UQpPvC4lD+OXPU/dmJ8Bj3x1uguPNCvEjf6HZgISptyk67RwtrT9jElMjO\nSRfgIsXEp8U3VhfPKyMFtUAGYzdG3uuUs4ehASH3UVF7QDD+LBBDK0cpxDD/nJvK\nXsHWT5nbsItGGGjOqYcZ+4s733a2AZad45Va4a80sQKBgQD/0HW7lYw9g3B0SJid\n9d6ptcOkn8T8eCFbz80LGuL25ttK/CTCkTm4i431BytI8xCD60Ao6GFbmKuXaTbo\n4SyA4i4+rX+49s/l8Q491g/R2h240TwDAZccZ1kb/wxow96DtC099QvGDIHwSdgE\nZb+iS5g2/rZtcPpYE5iqHXaiDQKBgQDkH+h0rXBXW96zE34NC+DiGu5v2t/HoDbF\nMtDwvy4pGZ6YJtWjF0iDfy4qi1+WuS7mNZbFU3GEp6EO4JMl8Ym92ufJEITsDI0L\nXcCl61OFOFKEjqnTLGBFkzQ/JEja1cPFLRUUT+3Kl8ARcXhPe0J84Rmhtx26XDCt\nOQdkI9cYQwKBgQC+ftqdVND5Ib8FKOZVgrlMAanuFnfXVhHpT8YuBdiL6f/VSAyL\nwx+LmIietbb6/N4Ijo/ZpqqRThBBkT0tkDjWxReQ3xxkfY71eVuUmqpvKBDIBy+8\nQVvo7+EAox33ihxSUUL7h1Y8JiZA7IxrQeXBkq+IDIeG2gHiwr0FuSkVpQKBgQDW\n4/POTT7hG+qJmBgKZCEf/KyU84IPgy10z2yhDAaIstiBjTt72Uf2jsxHSWjvC1xR\ngTOYiAUMJ/gAkq4qdQACtv3WmlgMH7qRdWwvH6FagfbBZb417bx2bbcur5hthCZZ\nTCFqM+zVBePoypHBlWPJTSYe/ubjEUrNMkZzH4vUDwKBgQCWwVZjcbG2WIdTalY6\nkLvKMjhIMo8HN1qu8Bd9Cr3ACcPDy+JlULOWp3K+w45gREQ6TCd5vgbsf2kn3dav\nWiGQO6errvMp0PVEouchg9Bxk0ekFJa+xwRGpSrGlDFK2KRJkDl0a4h4bJYXKyU/\na8f1bp++nbsneBMoYf/227DO5Q==\n-----END PRIVATE KEY-----\n"},"meta":{"timestamp":"2026-06-02T16:51:51.705Z","request_id":"c81661ff-9e7a-4e28-bc59-08f8890c5927"},"status":"ok","message":"Generate a CSR + key","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/parse":{"get":{"operationId":"get_v1_parse","tags":["CSR"],"summary":"Parse a CSR","description":"","parameters":[{"name":"csr","in":"query","required":true,"description":"PEM CSR","schema":{"type":"string"},"example":"-----BEGIN CERTIFICATE REQUEST-----\nMIICxDCCAawCAQAwOTELMAkGA1UEBhMCREUxDjAMBgNVBAoMBW9hbm9yMRowGAYD\nVQQDDBFleGFtcGxlLm9hbm9yLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC\nAQoCggEBALPS08xpej3RxLTC6NzPDePUDG1aKZRURiB6nezaGZpUN17Ip47dEqxm\nzoXz7fB95WttryWqAQIErul2LFiCSyt5jK5TNn+LDXAo2uR+SaN8d20hyeTh/shm\nv9rD338a+mop3IO9Tgx4eQhTu9lqLOLbiLtDcufq7H5P6x2q0AgTHYYDvV3GWJje\nm5vvuuix4YVW9ZGaBq5S2Pt3xKIENZ5N0wS3uxCJYdUc9a+tK2ttS03MdM8XzsVq\notOB7eyIQEmPTDGZS2mOCuSE1oDki/3/xIVY4QVslZ2SETDt0tThgqKmVHhW3jHv\n3s/ZRaOC+qc8+V9tvokzoK1+6v9pkw8CAwEAAaBGMEQGCSqGSIb3DQEJDjE3MDUw\nMwYDVR0RBCwwKoIRZXhhbXBsZS5vYW5vci5jb22CFXd3dy5leGFtcGxlLm9hbm9y\nLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAkrVZEjOXDTTzbvPg5p/8w5eeCMAkwNcO\ncOIo6ox9+1K2R6ssbhuZ5NnVbmKFLFOkUpqXKHlxIyA4MXY9z1G0U4YEm9WHrQ98\nfg0o5WrIv/3m5koMkB4aCYcGznxgEIzkn+PE2lMtiZrVrRLYCOA5YJw0A0EGQM4W\nCTEYTcxHpHMUcu9N3jA9V+Jhn3uEfw9Z0GNeBdROWRNiTBMrvWb+s16UE81J/HUW\nWoQqFFyMRv8z9bGIjN2dsvoppFM4TRZ7mDNkxmSN4o9OiCpwBaU+DEn9GFH1jDVy\nVT9bH91hecoMll1L+Mr/vfYBCGaO0r76TJQdKQVd8UKaKzffgb3Jvw==\n-----END CERTIFICATE REQUEST-----"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"key":{"bits":2048,"type":"rsa"},"subject":{"C":"DE","O":"oanor","CN":"example.oanor.com"},"signature_valid":true,"subject_alt_name":["example.oanor.com","www.example.oanor.com"]},"meta":{"timestamp":"2026-06-02T16:51:51.793Z","request_id":"4118bc86-e1d3-46c3-aab4-0046f93b05b7"},"status":"ok","message":"Parse a CSR","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"auth":"none upstream; this gateway requires x-api-key","name":"CSR API","note":"Generate and parse X.509 Certificate Signing Requests. /v1/generate?common_name=example.com&org=…&san=example.com,www.example.com&bits=2048 returns a CSR plus a fresh RSA private key (PEM). /v1/parse?csr=… reads the subject, SANs, key size and signature validity. For development/testing — keep production keys offline. Distinct from key-pair generation, certificate decoding and live SSL checks.","source":"Local PKCS#10 generation/parsing (Node crypto + node-forge) — no key, no upstream","endpoints":3},"meta":{"timestamp":"2026-06-02T16:51:51.890Z","request_id":"019a9f5b-2f21-4695-9b70-ac93e4a86b3f"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":1120,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":300,"monthly_call_quota":10000,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2260,"monthly_call_quota":144000,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":5860,"monthly_call_quota":740000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/csr-api"}