Approve Requests with the pkiaas CLI
List Pending Requests
pkiaas request list lists your CA’s requests that wait for something, newest first, as the website’s Pending Requests page does:
Pending requests in Example Root CA (a1B2c3D4e5)ID NAME STATUS TEMPLATE REQUESTEDXq7Ld2Rk9TfP3wVb8NcJ5mHs1GyZ4a www.example.com pendingApproval Web Server 2026-10-22Pm4Wc8Hn2Jd6Rt1Kv9Bx5Fs3Lq7Ze0 laptop-042 preApproved Devices 2026-10-21Gh2Yt6Ns0Vr4Kc8Mx1Dp5Qw9Bj3Lf7 alice@example.com pendingApproval (no CSR) User 2026-10-203 requestsThe status says what each request waits for:
- pendingApproval: a member of the CA approves or declines it. A request without a CSR, such as one from the public request form, needs an approved voucher, which only the website sends.
- pendingEmailVerification: the requester has yet to confirm their email address.
- preApproved: it’s issued when the requester picks it up with its voucher or SCEP challenge.
- processing: it’s being signed, which takes seconds. One that has been processing for more than 10 minutes is stuck: decline it, and the requester can make a new request.
Issued and declined requests aren’t listed, nor are requests from ACME. Search by name with --search example.com, in any case, and sort with --sort (requestedAt, name or template) and --order asc or desc. It lists 50 requests by default; --limit shows up to 1000.
Check a Request
pkiaas request show <ID> shows a request, issued and declined ones too, with what its CSR asks for:
Request: www.example.com (Xq7Ld2Rk9TfP3wVb8NcJ5mHs1GyZ4a) CA: Example Root CA (a1B2c3D4e5) Status: pendingApproval Template: Web Server (tmplweb001) Source: api Requested: 2026-10-22T14:05:31.000Z Subject: CN=www.example.com Alt names: DNS:www.example.com, DNS:example.com Key: rsaEncryption (2048 bits)The template, not the CSR, decides what the certificate holds, such as its validity and key usages. Once the request is issued, it shows the certificate’s serial.
Approve
pkiaas request approve <ID> approves a request: the CA signs its CSR as the request’s template says, as Sign on the website does without changes, and the command ends once the certificate is issued. On a CA whose key is on an IoT HSM, that can take a few seconds.
Approved the request Xq7Ld2Rk9TfP3wVb8NcJ5mHs1GyZ4a for www.example.com: issued the certificate with serial 25ab765c7238b3d28d2bab03271f5fa8f2fccf86 (pkiaas cert export 25ab765c7238b3d28d2bab03271f5fa8f2fccf86)- Get the certificate too: with
--out FILE, the command also saves the issued certificate, aspkiaas cert exportdoes:--chainadds the certificates that issued it, up to the root,--format dersaves it as DER, and the file is never replaced unless you add--force.--out -writes the certificate to standard output instead, for piping. - Safe to repeat: approving a request that is issued already changes nothing, so you can run the command again, for example after a lost connection.
- What can be approved: only a request that waits for approval and has a CSR. Others fail with
request_not_approvable(no CSR, email not confirmed, pre-approved),request_declined, orrequest_processingwhile it’s being signed (wait a few seconds and check it withrequest show). - When signing fails: if the CA can’t sign the request, for example because its IoT HSM doesn’t answer, the command fails with
signing_failedand the request waits for approval again. The CA’s log on the website says why.
pkiaas request approve Xq7Ld2Rk9TfP3wVb8NcJ5mHs1GyZ4a --chain --out fullchain.pemChange the Certificate When Approving
By default the certificate holds what the CSR asks for, as the template allows. To change that, give request approve the new values, as Override requested attributes and Override validity time do on the website’s Pending Requests page:
--subject DN: the subject in place of the CSR’s, in RFC 4514 form ("CN=www.example.com,O=Example,C=US") or OpenSSL’s ("/C=US/O=Example/CN=www.example.com"), aspkiaas csr createtakes it. The template’s subject attributes still win.--san NAME: a subject alternative name in place of the CSR’s. Repeat it for each name, and list them all: the CSR’s names are replaced, not added to. Writedns:NAME,ip:ADDRESS,email:ADDRESSoruri:URI, or a bare name whose kind is guessed.--not-after TIME: when the certificate expires, in place of the template’s validity, in RFC 3339 form such as2027-01-31T00:00:00Z. It’s valid from now, or from--not-before TIME.
pkiaas request approve Xq7Ld2Rk9TfP3wVb8NcJ5mHs1GyZ4a --san www.example.com --san example.com --not-after 2027-01-31T00:00:00ZApproved the request Xq7Ld2Rk9TfP3wVb8NcJ5mHs1GyZ4a for www.example.com with the given subject alternative names and validity: issued the certificate with serial 25ab765c7238b3d28d2bab03271f5fa8f2fccf86 (pkiaas cert export 25ab765c7238b3d28d2bab03271f5fa8f2fccf86)- Which requests: changes need a request that waits for approval with its CSR, ready to be signed (
statusDetailisreadyToBeSignedinpkiaas request show --json); others fail withrequest_not_approvable. - Values OpenSSL won’t take, such as a common name longer than 64 characters, fail with
invalid_overrides. Nothing is signed, and the request still waits for approval, so fix the value and approve it again. - Validity needs a subscription while the CA has a validity limit (
validityLimitDaysinpkiaas request show --json); without one,--not-beforeand--not-afterfail withsubscription_required. - Repeating: approving a request that is issued already never signs it again, so changes given then aren’t applied, and the command says so.
pkiaas request create --approve takes the same flags, to request and issue a certificate with changes in one command (see Get the Certificate Now).
Decline
pkiaas request decline <ID> declines a request for good: it will never be issued, and its voucher, email confirmation link and SCEP challenge stop working. It asks you to confirm; in scripts, add --yes.
Decline the request Gh2Yt6Ns0Vr4Kc8Mx1Dp5Qw9Bj3Lf7 for alice@example.com? This can't be undone. [y/N]Declining can’t be undone, but the requester can make a new request. Declining a request that is declined already changes nothing. An issued request can’t be declined (request_issued): revoke its certificate instead.
Requests are approved and declined in the active CA, or in another one with --ca (see Choose Your CA).