canonical: https://jentic.com/apis/acrual.com/acrual

# Acrual API

Jentic publishes the only available OpenAPI specification for Acrual API, keeping it validated and agent-ready. Acrual is a job management and invoicing platform for service businesses, and its API exposes 35 endpoints across clients, employees, jobs, quotes, invoices, purchase orders, suppliers, time entries, variations, hooks, integrations, and settings. Jobs can have files uploaded, folders created, and invoiced status retrieved. Authentication is bearer token, base URL is acrual.com/api/v1.0.

## For AI agents

Manage clients, jobs, quotes, invoices, time entries, and supplier purchase orders in Acrual so agents can automate quoting, time logging, and invoicing for service businesses.

## Scope

Does not handle bookkeeping ledgers, GST/VAT filing, or card payment capture - use for job management, quoting, invoicing, and time tracking on Acrual only.

## Capabilities

- Retrieve client and supplier records to populate quotes and purchase orders
- Create and read jobs, including invoiced status, attached files, and folders
- Upload files and create folders inside a job for project documentation
- Generate quotes for prospects and convert won quotes into job records
- Create invoices tied to a job and read invoice status
- Log time entries against jobs for billing and reporting
- Manage variations on existing jobs to track scope changes

## Use cases

### Quote-to-Job Conversion Workflow

When a quote is accepted, an automation calls the quote endpoints to mark it won and the jobs endpoints to create the corresponding job record. The new job inherits client and pricing context from the quote. Service business owners stop double-entering data between sales and delivery and the same record carries through to invoicing.

Example prompt: On quote acceptance, create a new job tied to the same client and pre-fill its scope from the quote line items

### Job File and Folder Management

A field team uploads site photos and signed documents straight into the job record by calling /jobs/{id}/files/upload and creating folders via /jobs/{id}/files/folder. Office staff find the right file inside Acrual instead of digging through email or shared drives. The job becomes the single source of truth for that engagement.

Example prompt: Create a 'Site Photos' folder under a given job and upload three images into that folder

### Time Tracking Roll-Up to Invoices

Workers log time via a mobile app that posts entries to the time entries endpoint. End-of-week, an automation reads time entries by job, generates invoice line items, and creates the invoice via the invoices endpoints. Invoices ship within a day of work completion rather than at month-end.

Example prompt: Roll up time entries for last week per job, create one invoice per job, and email a summary to the operations manager

### Agent-Driven Job Updates via Jentic

An AI assistant in a service business's chat tool answers 'what's the status of job 245?' or 'create a variation on job 245 for an extra day's work'. The agent calls Acrual through Jentic, looks up the job, and posts the variation. The bearer token never enters the agent's context.

Example prompt: Through Jentic, search 'create a variation on a job', load the variations endpoint, and create a variation for an extra day's labor on job 245

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | /clients | List clients |
| GET | /clients/{id} | Retrieve a client record |
| GET | /jobs | List jobs |
| GET | /jobs/{id} | Retrieve a job |
| GET | /jobs/{id}/invoiced | Get invoiced status for a job |
| POST | /jobs/{id}/files/upload | Upload a file to a job |
| POST | /jobs/{id}/files/folder | Create a folder inside a job |
| GET | /employees | List employees |

## Key resources

- **Clients** — Read client records used as the parent of jobs, quotes, and invoices
- **Employees** — Read employee records for time entry and assignment
- **Jobs** — Create and read jobs, manage file uploads, folders, and invoiced status
- **Quotes** — Generate quotes and convert won quotes into jobs
- **Invoices** — Create invoices tied to jobs and read invoice status
- **Purchase Orders and Suppliers** — Manage supplier records and POs against jobs
- **Time Entries** — Log time against jobs for billing and reporting
- **Variations** — Track scope changes and out-of-scope work on existing jobs

## Why Jentic

- **Setup:** Wiring the Acrual API by hand means holding its bearer token, attaching the Authorization header on every call, and tracking job and client ids across job, quoting, and time-tracking endpoints. Through Jentic you install once, import the Acrual API from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** Acrual puts the job id in the URL path (/jobs/{id}/...), so a rule can pin your agent to one job: it can read that job's invoiced status and upload files to it and nothing else. You choose the operations it may call, so reading employees or other clients is not included unless you add it.
- **Credential handling:** Your Acrual bearer token is stored once, encrypted, by your own Jentic One instance and injected as the Authorization header at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'create a new job for a client', and Jentic returns the matching Acrual operation with its input schema and required client id parameter so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Everhour API** — Time tracking and project profitability API with a narrower scope than Acrual's job management.
- **Xero Accounting API** — Push Acrual invoices into Xero for bookkeeping and tax reporting.
- **Stripe API** — Take card payments on invoices generated in Acrual.

## FAQ

### Why is there no official OpenAPI spec for Acrual API?

Acrual does not publish a public OpenAPI specification. Jentic generates and maintains this spec so that AI agents and developers can call Acrual API via structured tooling. It is validated against the live API and kept up to date. Get started with Jentic One, the self-hosted execution layer.

### What authentication does the Acrual API use?

Bearer token authentication on every request via the Authorization: Bearer <token> header. Through Jentic, the token is stored encrypted in the vault and injected at execution time, so the raw value stays out of agent context.

### Can I upload files to a job through the Acrual API?

Yes. POST /jobs/{id}/files/upload uploads a file to the job and POST /jobs/{id}/files/folder creates a named folder. DELETE /jobs/{id}/files removes attachments. Use these to keep contracts, site photos, and inspection documents on the job record itself.

### What are the rate limits for the Acrual API?

The OpenAPI spec does not document explicit rate limits. Treat the API as throughput-bounded by your Acrual plan and back off on HTTP 429. For batch sync of jobs and time entries, page through /jobs and /clients rather than fetching detail per record.

### How do I create a job through Jentic?

Run pip install jentic, then search 'create a new job for a client'. Jentic returns the jobs endpoint with its input schema, you supply the client id and job description, and execute. The bearer token is injected at execution time.

### Does the Acrual API expose webhooks?

Yes - the spec includes a hooks tag covering webhook subscription endpoints, which let you receive events when jobs, invoices, or other resources change. This avoids polling for status changes during long-running engagements.

### Can I limit what my agent is allowed to do with the Acrual API?

Yes. Because you run Jentic One yourself, your own rules decide which Acrual operations and credentials the agent may use. Since Acrual puts the job id in the URL path (/jobs/{id}/...), you can pin the agent to a single job so it can read that job's invoiced status via GET /jobs/{id}/invoiced and upload files with POST /jobs/{id}/files/upload, and nothing more. You choose the operations it may call, so listing employees or reading other clients stays off limits unless you explicitly add those endpoints.
