policyUrl field on the organization.
Overview
A policy document is a PDF (or other file) that describes the expense rules for an organization: what employees can claim, receipt requirements, mileage rates, per-diem limits, and so on. Each organization can hold one or more policy documents, and Findity exposes a pre-signed URL to the active document on the organization record so end users can read it in the app. The typical lifecycle is: (1) list existing documents, (2) fetch a specific document to review it, (3) update its display metadata, and (4) delete documents that have been superseded. Every policy document has two parts:- A binary file — the PDF itself, stored by Findity and served over a pre-signed URL.
- A metadata record — the display name, filename, upload timestamp, and uploader. Returned by the list endpoint and editable via
PUT.
name, the right fileName) is what your users will see when they open the policy from the expense app.
Prerequisites
- Complete Authentication and obtain an admin-scoped access token.
- Create or identify the customer organization (see Admin API — Organizations) and have its
organizationId(UUID) ready. The policy endpoints use the internal UUID, notexternalId. - Have the policy PDF ready if you’re going to reference it in a fresh upload, along with the
documentIdof any existing document you need to update or delete.
Key concepts
API endpoints
All policy endpoints use the Admin API base URL. Examples in this guide use the stage environment — switch to the production host (https://expense.findity.com/api/admin) only when you’re ready to go live.
Required headers
Include these on every request:The
GET for a single document returns application/pdf (binary), not JSON. Save the response to a file or stream it — don’t try to parse it as JSON.Step 1 — List policy documents
Fetch every policy document currently attached to the organization. Use the results to find thedocumentId you need for the per-document operations.
GET /organizations/{organizationId}/policies/documents
Query parameters
cURL
JSON
documentId returned here is what you’ll pass to the GET, PUT, and DELETE endpoints below.
Step 2 — Download a policy document
Fetch the binary content of a single policy document. The response is the raw file (typicallyapplication/pdf), not a JSON envelope.
GET /organizations/{organizationId}/policies/documents/{documentId}
cURL
--output policy.pdf flag writes the response body to a local file. Without it, cURL prints the binary to your terminal.
Not found response
JSON
404 when the documentId doesn’t match a document on the organization, or when the caller doesn’t have admin scope for the organization (the API returns 404 rather than 403 in that case to avoid leaking existence).
Step 3 — Update policy document metadata
Change the displayname or fileName of an existing document. The PUT updates metadata only; it doesn’t replace the underlying binary. To replace the file itself, delete the old document and upload a fresh one.
PUT /organizations/{organizationId}/policies/documents/{documentId}
Request body — fields
cURL
JSON
name and fileName are user-editable — the rest is managed by Findity.
Step 4 — Delete a policy document
Remove a policy document from the organization. This deletes both the binary and its metadata record. If the deleted document was the organization’s active policy,policyUrl on the organization payload becomes null until another document is uploaded.
DELETE /organizations/{organizationId}/policies/documents/{documentId}
cURL
200 OK with an empty body.
Reading the active policy from the organization payload
The organization record exposes the currently active policy through thepolicyUrl field:
JSON
- Pre-signed URL. The link is short-lived. Fetch a fresh organization payload when the URL expires rather than caching it long-term.
- Null when no policy exists.
policyUrlisnullon organizations with no policy documents configured. - Points to the active document. When multiple policy documents exist,
policyUrlpoints to the active one. Use the list endpoint above to see every document on the organization.
Common integration patterns
Publishing a new annual policy. When you roll out an updated policy each year, upload the new PDF through the Findity admin UI, then usePUT to set a clear name (e.g. “Expense policy 2026”) so users can distinguish it from the previous year’s version. Delete the superseded document once the new one is live.
Auditing what’s attached. Run the list endpoint periodically and check the date and uploadedBy fields to confirm no unexpected documents were added. Sort by date to spot the most recent uploads first.
Cleaning up stale documents. If an organization has accumulated old policies from prior years, iterate the list response, download each with the binary GET endpoint to archive it locally, then DELETE the ones you no longer need to keep active.
Error handling
Findity returns a JSON envelope on errors:JSON

