---
title: "Request a Certificate of Good Standing"
method: POST
path: "/api/v1/legal_entities/{id}/certificate_requests"
tags: ["Entity filings"]
---

# Request a Certificate of Good Standing

`POST /api/v1/legal_entities/{id}/certificate_requests`

Creates a request and its invoice, or returns the entity's existing open or issued request. Reuse after review or issuance does not re-check current tax eligibility. Pay the invoice with a voucher, or in the portal, to have the certificate issued. Tax-current entities are issued automatically after payment; contested requests go to admin review. Returns 409 with code `certificate.tax_overdue` when overdue taxes block the request and no contest was supplied. Standard keys act on every entity the key owner actively represents. Agent Keys are limited to entities incorporated through the API and need active representation and the listed `agent:entity.filing.*` scope. Agent writes also require an active Manifestation of Will. OAuth tokens and Partner Keys cannot call these filing endpoints. See https://docs.eprospera.com/entity-filings for signing, payment, and recovery. Agent scope: `agent:entity.filing.create`.

Account deactivation revokes personal API keys, including Agent Keys, and OAuth authorizations. Account reactivation requires new API keys, including new Agent Keys, and consent; previously issued credentials remain invalid.

## Path parameters

- `id` string, uuid, required

## Request body

- CertificateRequestBody
  - `contest` object — Required only when `eligibility.taxCompliant` is false and the requester disputes the overdue flag.
    - `note` string, required
    - `proofUrl` string, uri, required — URL of a proof-of-payment document on the approved e-Próspera portal upload host. Arbitrary external URLs are rejected; this release has no public certificate-proof upload API.

## Response `200`

Certificate request with next steps.

- CertificateRequestResponse
  - `data` CertificateRequest, required
    - `id` string, uuid, required
    - `legalEntityId` string, uuid, required
    - `type` 'certificate_of_good_standing', required
    - `statusId` 'Draft' | 'Pending Payment' | 'Pending Review' | 'Approved' | 'Issued' | 'Rejected' | 'Cancelled', required — Pending Payment: awaiting payment or asynchronous payment processing; check invoice status before paying again. Pending Review: awaiting registrar review, including contested or unresolved tax compliance. Approved: PDF generation in progress. Issued: certificate available at `documentUrl`. Issued, Rejected, and Cancelled are terminal: stop polling on each. Rejected and Cancelled do not yield a certificate.
    - `contested` boolean, required
    - `taxContestNote` string, nullable, required
    - `taxPaymentProofUrl` string, uri, nullable, required
    - `contestedAt` string, date-time, nullable, required
    - `rejectionReason` string, nullable, required
    - `reviewedAt` string, date-time, nullable, required
    - `issuedAt` string, date-time, nullable, required
    - `documentId` string, uuid, nullable, required
    - `documentUrl` string, uri, nullable, required
    - `invoice` FilingInvoice, nullable, required
      - `id` string, uuid, required
      - `statusId` string, required — Invoice status, for example `open` or `paid`.
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
    - `nextSteps` CertificateRequestNextSteps, required
      - `paymentRequired` boolean, required
      - `awaitingReview` boolean, required
      - `issued` boolean, required
  - `nextSteps` CertificateRequestNextSteps, required
    - `paymentRequired` boolean, required
    - `awaitingReview` boolean, required
    - `issued` boolean, required

## Other responses

- `400` — Validation error or precondition failure.
- `401` — Missing or invalid credential.
- `403` — Credential lacks the required scope (Agent Key) or insufficient OAuth scope.
- `404` — Resource does not exist or is invisible to the caller. The two are intentionally indistinguishable.
- `409` — Conflicting state (e.g. legal-entity name already taken).
- `429` — Rate limit exceeded. No `Retry-After` header is currently emitted; back off exponentially.
- `500` — Server error.

## Changes

- **2026-09-22** `d2c5a5cda002` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/eprospera/apis/e-pro-spera-api/changes/api/v1/legal_entities/:id/certificate_requests/post.md)

---

[API](https://skmtc.dev/eprospera/apis/e-pro-spera-api.md) · [All operations](https://skmtc.dev/eprospera/apis/e-pro-spera-api/llms.txt) · [OpenAPI document](https://skmtc.dev/eprospera/apis/e-pro-spera-api/revisions/6fbf9c9b36b5?raw)
