Par Connect for developers
Version 1 · October 16, 2026
Par Connect lets Par users ask about your app from their Par assistant: "What's new in Acme CRM?", "Find the Northwind deal". You add two read-only HTTPS endpoints; users connect with a key you give them. Requests come from the user's phone, not from our servers.
How it works
- You implement
GET /par/v1/infoandGET /par/v1/itemson your service. - Your user creates an API key in your app (scoped to what they can see).
- In Par: Apps → Add custom app, enter your base URL and the key, tap Test connection.
- Par lists matching items with links to your app, and can summarize them with the AI on the user's phone. Par never writes to your app.
Endpoints
Full contract: OpenAPI 3.1 spec (par-connect.yaml).
GET /par/v1/info
Used by "Test connection". Returns your app's name.
{ "name": "Acme CRM", "description": "Leads and deals", "version": "1" }
GET /par/v1/items?q=&since=&limit=
Items the key's owner can see, newest first. q holds words from the user's question (empty for "what's new?"); since is an ISO 8601 time; limit is 1–25 (default 10).
{
"items": [
{
"id": "deal-981",
"title": "Northwind renewal",
"summary": "Renewal quote sent; waiting for signature.",
"status": "Waiting",
"author": "Ana Cruz",
"updated_at": "2026-10-16T08:30:00Z",
"url": "https://crm.example.com/deals/981"
}
]
}
Requirements
- HTTPS only, a valid certificate, and
Authorization: Bearer <key>on every request. - Respond within 10 seconds with at most 256 KB of JSON (
Content-Type: application/json). - Plain text only; Par shows text as-is and cuts
titleat 200,summaryat 1000,status/authorat 60 characters. urlmust be https. Required item fields:id,title,updated_at.- Return 401 for a missing or revoked key (Par asks the user to reconnect) and 429 when rate limiting.
- Return only data the key's owner may see. Item text is treated as untrusted: it can never instruct Par to take actions.
Example (Laravel)
Route::middleware('auth:sanctum')->prefix('par/v1')->group(function () {
Route::get('info', fn () => ['name' => 'Acme CRM', 'version' => '1']);
Route::get('items', function (Request $request) {
$deals = $request->user()->deals()
->when($request->q, fn ($q, $text) => $q->where('title', 'like', "%{$text}%"))
->when($request->since, fn ($q, $since) => $q->where('updated_at', '>=', $since))
->latest('updated_at')
->limit(min((int) ($request->limit ?? 10), 25))
->get();
return ['items' => $deals->map(fn ($d) => [
'id' => (string) $d->id,
'title' => $d->title,
'summary' => $d->notes,
'status' => $d->stage,
'updated_at' => $d->updated_at->toIso8601String(),
'url' => route('deals.show', $d),
])];
});
});
Testing checklist
curl -H "Authorization: Bearer $KEY" https://your-service.example.com/par/v1/inforeturns your name.- A wrong key returns 401; an empty
qreturns recent items. - In Par, Test connection shows your app's name, then ask "What's new in <your app>?".
Support
Questions or a listing in Par's Apps catalog: [email protected]. Please include your base URL and what you expected; never send API keys.