canonical: https://jentic.com/apis/onebookplus.com.au/onebookplus

# OneBookPlus Public API

The OneBookPlus Public API reads and writes a tenant's business records in OneBookPlus: contacts, bookings, quotes, jobs, and invoices. Contacts can be created, updated, filtered by email, and soft-deleted, while bookings, quotes, and jobs can be created and moved through their status lifecycles. Invoices are readable and filterable by status or number, and webhook subscriptions push events such as invoice.paid, quote.accepted, or job.completed to your own URL. List endpoints share cursor pagination and an updated_since filter for incremental sync.

## For AI agents

Create and update OneBookPlus contacts, bookings, quotes, and jobs, read invoices by status or number, and subscribe to events like invoice.paid and job.completed.

## Scope

Does not process card payments, run payroll, or keep a general ledger. Use for managing a OneBookPlus tenant's contacts, bookings, quotes, jobs, and invoices only.

## Capabilities

- Create, update, and soft-delete customer contacts, and look a contact up by email
- Book a service for a contact with a service_name and start_time, then mark it confirmed, completed, cancelled, or no_show
- Raise a quote with line items and a valid_until date, then track it through statuses such as sent, accepted, or declined
- Open a job with a site address, priority, and scheduled window, and move it from scheduled to in_progress to completed
- Read invoices and filter them by status, such as overdue or paid, or by invoice number
- Subscribe a URL to events such as invoice.paid, booking.cancelled, or job.completed
- Sync only changed records with the updated_since filter and cursor pagination on every list endpoint

## Use cases

### AI front-desk agent that books and quotes

An AI agent handling inbound customer requests through Jentic finds or creates the customer with the contacts operations, books the requested service with POST /bookings, and raises a quote with POST /quotes against the same contact_id. The bearer key is injected at call time by your own Jentic One instance, so the agent gets the booking and quoting operations without holding the key.

Example prompt: Look up the contact by email with GET /contacts, create one with POST /contacts if none exists, then call POST /bookings with that contact_id, service_name 'Site inspection', and a start_time of tomorrow 09:00

### Overdue invoice follow-up

A small trades or services business wants a daily list of unpaid work. GET /invoices accepts a status filter with values including overdue and partial, so an agent can pull every overdue invoice, fetch each with GET `/invoices/{id}`, and join it to the contact record to prepare follow-up messages. Invoices are read-only through this API, so the follow-up never changes billing data.

Example prompt: Call GET /invoices with status=overdue, then GET `/contacts/{id}` for each invoice's contact and return a list of names, emails, and invoice numbers

### Job scheduling and status tracking

Field jobs move through statuses such as quoted, scheduled, in_progress, on_hold, completed, and invoiced. An agent can open a job with POST /jobs carrying a title, site address, and scheduled_start, then update its status and actual_total with PATCH `/jobs/{id}` as the work progresses, giving the office an up-to-date job board without manual edits.

Example prompt: Create a job with POST /jobs titled 'Replace hot water unit' with a site_address and scheduled_start, then later PATCH `/jobs/{id}` to set status completed and actual_total

### Event-driven sync to other tools

Instead of polling, register a webhook with POST /webhooks listing events such as invoice.paid, quote.accepted, booking.created, and contact.updated. OneBookPlus then posts each event to your URL, and for backfill the list endpoints accept updated_since so a sync job can catch up on anything changed while it was offline.

Example prompt: Call POST /webhooks with url https://example.org/hooks/obp and events ['invoice.paid','quote.accepted','job.completed']

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | `/contacts` | Create a contact |
| POST | `/bookings` | Create a booking |
| PATCH | `/bookings/{id}` | Update booking status or time |
| POST | `/quotes` | Create a quote |
| POST | `/jobs` | Create a job |
| PATCH | `/jobs/{id}` | Update a job |
| GET | `/invoices` | List invoices by status or number |
| POST | `/webhooks` | Create a webhook subscription |

## Key resources

- **Contacts** — Customer records with email, name, phone, company_name, and address fields; filterable by email and soft-deletable
- **Bookings** — Service appointments for a contact with service_name, start_time, end_time, and a status of confirmed, completed, cancelled, or no_show
- **Quotes** — Priced offers for a contact with total, currency, line_items, and valid_until
- **Jobs** — Work orders with job_type, priority, site address, scheduled window, and estimated and actual totals
- **Invoices** — Read-only invoices filterable by status and number
- **Webhooks** — Event subscriptions that push invoice, quote, booking, job, contact, and payment events to a URL

## AI readiness

This API is usable in Jentic One now. Its AI-readiness score against Jentic's framework shows where it stands today and where improvements would make it even easier for agents to use.

- **Score:** 67 / 100
- **Maturity:** AI-Aware
- **Dimensions:**
  - Foundational Compliance: 93 / 100
  - Developer Experience & Jentic Compatibility: 69 / 100
  - AI-Readiness & Agent Experience: 50 / 100
  - Agent Usability: 94 / 100
  - Security: 60 / 100
  - AI Discoverability: 63 / 100
- **View full report:** https://jentic.com/apis/onebookplus.com.au/onebookplus/scorecard
- **How the score is calculated:** https://docs.jentic.com/reference/api-readiness-framework/overview/
- **More about the dimensions:** https://docs.jentic.com/reference/api-readiness-framework/specification/#dimensional-model-overview

### Score it yourself

Every API in the directory is allowlisted, so you can re-score it with no key required.

- **Score your own API:** https://jentic.com/scorecard.md
- **Scoring CLI agent skill:** https://github.com/jentic/jentic-api-scorecard/blob/main/skills/jentic-api-scorecard/SKILL.md

```sh
npx @jentic/api-scorecard-cli score <openapi-url>
```

## Why Jentic

- **Setup:** Wiring OneBookPlus by hand means waiting for developer access approval, generating an obp_ key, sending it as a bearer token, and handling cursor pagination and the X-RateLimit headers yourself. Through Jentic you install once, import OneBookPlus from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** OneBookPlus puts each record id in the URL path (`/jobs/{id}`, `/bookings/{id}`), so a rule can bound your agent by operation and, where a task needs it, to a single record. You choose the operations it may call, so destructive ones like DELETE `/contacts/{id}` or DELETE `/webhooks/{id}` are not included unless you add them.
- **Credential handling:** Your OneBookPlus key is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'create a booking' or 'list overdue invoices', and Jentic returns the matching OneBookPlus operation with its input schema, including required fields like contact_id and start_time, so the agent calls the right endpoint directly.

## Related APIs

- **Apacta** — Field service platform for trades businesses tracking hours, materials, and projects
- **Xero Accounting API** — Accounting ledger, invoices, and payments for small businesses
- **Calendly API** — Scheduling links and event bookings driven by invitee self-service

## FAQ

### What authentication does the OneBookPlus Public API use?

The OneBookPlus Public API authenticates with a bearer token per its OpenAPI spec: send Authorization: Bearer with a key that starts with obp_, issued from the API keys page in your OneBookPlus dashboard after developer access is approved. The spec applies this requirement to every operation, including GET /ping. Through Jentic the key is stored by your own instance and attached to each call, so the agent never sees it.

### Can I create bookings and move them through statuses with the OneBookPlus Public API?

Yes. POST /bookings creates a booking and requires contact_id, service_name, and start_time, with optional end_time and notes. PATCH `/bookings/{id}` then updates status to values such as confirmed, completed, cancelled, or no_show, and can reschedule start_time and end_time.

### What are the rate limits for the OneBookPlus Public API?

The OpenAPI spec does not state a numeric limit. Responses carry X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers describing a sliding window, so an agent can read its remaining budget from any response and back off before the window resets. Contact support@onebookplus.com.au for the limit on your account.

### Is there a OneBookPlus MCP server?

You don't need an MCP server to give your agent OneBookPlus. Jentic connects it directly from the API Directory: import it, store your credential once, and your agent calls the contact, booking, quote, and job operations it needs on demand without loading another server's tool definitions into its context.

### How do I find overdue invoices with the OneBookPlus Public API through Jentic?

Search Jentic for 'list overdue invoices', load the GET /invoices operation, and execute it with status set to overdue. Page through results with the cursor parameter, then fetch any single invoice with GET `/invoices/{id}.` To run it on your own infrastructure, install Jentic One from its GitHub repo.

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

Yes. For a bookings assistant, write a rule that allows GET /contacts, POST /bookings, and PATCH `/bookings/{id}`, and the agent can find customers and book or reschedule appointments while contact deletion, webhook changes, and job edits stay outside its reach. Every call it makes is logged for review.
