certificate_request— an outstanding ask for an exemption certificate from one of your customers. Trigger one, read its state, cancel it.certificate_upload— a document you submit via the API for asynchronous processing. Poll it to learn which certificates it produced.exemption_certificate— the certificate itself, with per-jurisdiction validity, expiration, and a short-lived download URL.
customer— the specificCustomerrecord linked to the object.nullwhen no live Customer has been associated yet.linked_buyer— the master buyer entity. Populated whenever the object has a master-buyer reference, even when noCustomerrecord is linked yet. Prefer this field for rendering “who owns this certificate.”
All three surfaces are live-only. Using a
sk_test_* key returns
TESTMODE_NOT_SUPPORTED.Certificate Requests
Thecertificate_request object represents an outstanding ask for an
exemption certificate from one of your customers. A request is opened when
you (or an integration acting on your behalf) trigger one for a customer; it
closes when the customer submits a valid certificate, the request is
canceled, or it expires.
Lifecycle
pending and fulfilled are the only non-terminal-on-creation outcomes
clients typically observe.
When to read certificate requests
- Render a customer-facing dashboard of outstanding requests.
- Reconcile your CRM / sales system with which buyers still owe a cert.
- Stop a campaign when your sales team no longer needs the exemption (call
DELETE /tax/certificate-requests/{id}).
Triggering a certificate request
POST /tax/customers/{customer_id}/certificate-requests opens a new request
for an existing customer. Full reference documentation for the trigger
endpoint ships in an upcoming release.
Reading a fulfilled request’s certificate
Oncestatus flips to fulfilled, the certificate_id field is populated
with the cert_* id of the submitted certificate. Fetch it via
GET /tax/certificates/{certificate_id}
to read its status, jurisdictions, and download URL.
Example
Certificate Uploads
Thecertificate_upload object represents a document you submitted via
POST /tax/certificates.
It is a processing job, not a certificate: Numeral downloads the document
from the URL you provide, classifies its type and jurisdiction, and produces
zero or more exemption_certificate objects from it. Upload ids are
upl_<number>; endpoints that accept an upload id also accept the bare
numeric form.
For the end-to-end flow, see
Submit Certificates via API.
Fields
Lifecycle
Upload statuses are a separate vocabulary from certificate statuses. An upload describes the job; a certificate describes the output.
Poll
GET /tax/certificate-uploads/{upload_id}
until status leaves processing. Once terminal, the status will not
change.
A
completed upload does not imply an active certificate. Each id in
certificate_ids has its own certificate status (processing,
needs_info, active, …) under Numeral’s review pipeline. Read the
certificate before relying on the exemption.Pre-mapping to a customer
Submit withcustomer.reference_customer_id and the resulting certificate is
attributed to that buyer up front. Once the certificate is active, a
POST /tax/calculations carrying the same reference_customer_id applies
the exemption automatically. An unknown reference_customer_id creates the
customer, so pre-mapping works before the customer exists in Numeral.
Example
Exemption Certificates
Theexemption_certificate object represents a tax exemption certificate
submitted by one of your customers. Use the certificate endpoints to render
exemption state in your own UI, sync validity / expiration into your system
of record, and offer a download link to the original document.
Public status vocabulary
Thestatus field uses a deliberately narrow public vocabulary — Numeral’s
review pipeline runs many internal states that are not surfaced.
expiring and expired are kept distinct from invalid so you can
differentiate a lapsed but renewable certificate from a revoked or rejected
one.
A top-level status reflects the certificate as a whole. Each entry in
jurisdictions[] carries its own status — a certificate may be active
in one jurisdiction and expired in another.
Per-jurisdiction validity
Multi-state certificates expose one entry per covered jurisdiction:status as authoritative when calculating whether
a buyer is exempt in a specific state — the top-level status is a summary
view.
Downloading the document
GET /tax/certificates/{certificate_id} returns a pre-signed download_url
that expires one hour after issuance. Re-fetch the certificate to mint a
fresh URL. download_url is null until the certificate is fully ingested
(a processing certificate may have no document attached yet).