PHPackages                             blamodex/laravel-quo - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. blamodex/laravel-quo

ActiveLibrary[API Development](/categories/api)

blamodex/laravel-quo
====================

A Laravel wrapper for the Quo (OpenPhone) public API v1.

v1.0.0(1mo ago)10MITPHPPHP ^8.2CI passing

Since Jun 2Pushed 1mo agoCompare

[ Source](https://github.com/blamodex/laravel-quo)[ Packagist](https://packagist.org/packages/blamodex/laravel-quo)[ Docs](https://github.com/blamodex/laravel-quo)[ RSS](/packages/blamodex-laravel-quo/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (1)Dependencies (7)Versions (3)Used By (0)

Blamodex Laravel Quo
====================

[](#blamodex-laravel-quo)

[![Latest Version on Packagist](https://camo.githubusercontent.com/a69f53b0d1920b8d6dbedf594aa0a3497b8d460270236818ebd260044a7c39f5/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f626c616d6f6465782f6c61726176656c2d71756f2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/blamodex/laravel-quo)[![GitHub Tests Action Status](https://camo.githubusercontent.com/b1e98967e5a4388aacc1e7a484b5c8ec45d2f0d78d710f5702eedfa1c5c2dd2b/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f626c616d6f6465782f6c61726176656c2d71756f2f63692e796d6c3f6c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/blamodex/laravel-quo/actions)[![Total Downloads](https://camo.githubusercontent.com/ea95cf376e3c29a4f99481fc0f0a68e24514cee56187e91d0aa18666480f61b9/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f626c616d6f6465782f6c61726176656c2d71756f2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/blamodex/laravel-quo)[![License](https://camo.githubusercontent.com/1b01ef0024ba0866c115986b895301f657c1b21fc29f05c4844b7f2e8d89204d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e7376673f7374796c653d666c61742d737175617265)](https://opensource.org/licenses/MIT)[![Laravel](https://camo.githubusercontent.com/28258179aab3740537de18650134eb68e8c5f1f7396109f5bcfd29ddf28bb4d8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d31322d7265642e7376673f7374796c653d666c61742d737175617265)](https://laravel.com)[![PHP](https://camo.githubusercontent.com/6d0e63bb9482df87aa6c6ea983969a625be703cd8cfc3460c99eb1e582e6b46f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e322532422d626c75652e7376673f7374796c653d666c61742d737175617265)](https://www.php.net/)

A Laravel wrapper for the Quo (OpenPhone) public API v1. Provides typed, namespaced access to all API resources with full test coverage.

---

Table of Contents
-----------------

[](#table-of-contents)

- [Features](#-features)
- [Installation](#-installation)
- [Configuration](#-configuration)
- [Usage](#-usage)
    - [Calls](#calls)
    - [Contacts](#contacts)
    - [Conversations](#conversations)
    - [Messages](#messages)
    - [Phone Numbers](#phone-numbers)
    - [Users](#users)
    - [Webhooks](#webhooks)
- [Error Handling](#-error-handling)
- [Testing](#-testing)
- [Project Structure](#-project-structure)
- [Contributing](#-contributing)
- [License](#-license)

---

Features
--------

[](#features)

- Full coverage of the Quo (OpenPhone) API v1 (27 endpoints)
- Namespaced resource services (calls, contacts, messages, etc.)
- Typed DTOs for all API responses
- Built-in error handling with `QuoApiException`
- Connection timeout and failure handling
- Laravel service provider with auto-discovery

---

Installation
------------

[](#installation)

Install the package with Composer:

```
composer require blamodex/laravel-quo
```

---

Configuration
-------------

[](#configuration)

Set your API key in `.env`:

```
QUO_API_KEY=your-api-key-here
```

Optionally publish the config file:

```
php artisan vendor:publish --tag=blamodex-quo-config
```

This creates `config/quo.php` with the following options:

```
return [
    'api_key' => env('QUO_API_KEY', ''),
    'base_url' => env('QUO_BASE_URL', 'https://api.openphone.com'),
];
```

---

Usage
-----

[](#usage)

Inject `QuoService` or resolve it from the container:

```
use Blamodex\Quo\Services\QuoService;

$quo = app(QuoService::class);
```

### Calls

[](#calls)

```
// List calls for a phone number
$result = $quo->calls()->list('PN123', ['+15551234567'], [
    'maxResults' => 25,
    'createdAfter' => '2025-01-01T00:00:00Z',
]);
// $result['calls'] => array of CallData
// $result['totalItems'] => int
// $result['nextPageToken'] => string|null

// Get a single call
$call = $quo->calls()->find('AC123');

// Get recordings for a call
$recordings = $quo->calls()->getRecordings('AC123');

// Get call summary
$summary = $quo->calls()->getSummary('AC123');

// Get call transcript
$transcript = $quo->calls()->getTranscript('AC123');

// Get voicemail for a call
$voicemail = $quo->calls()->getVoicemail('AC123');
```

### Contacts

[](#contacts)

```
// List contacts
$result = $quo->contacts()->list(['maxResults' => 50]);

// Get a contact
$contact = $quo->contacts()->find('CT123');

// Create a contact
$contact = $quo->contacts()->create([
    'firstName' => 'John',
    'lastName' => 'Doe',
    'phoneNumbers' => [['name' => 'Mobile', 'value' => '+15551234567']],
]);

// Update a contact
$contact = $quo->contacts()->update('CT123', [
    'defaultFields' => ['firstName' => 'Jane'],
]);

// Delete a contact
$quo->contacts()->delete('CT123');

// Get custom fields
$fields = $quo->contacts()->getCustomFields();
```

### Conversations

[](#conversations)

```
// List conversations
$result = $quo->conversations()->list([
    'phoneNumbers' => ['+15551234567'],
    'excludeInactive' => true,
    'maxResults' => 25,
]);
```

### Messages

[](#messages)

```
// List messages
$result = $quo->messages()->list('PN123', ['+15551234567']);

// Get a message
$message = $quo->messages()->find('MSG123');

// Send a message
$message = $quo->messages()->send(
    'Hello!',
    '+15551234567',
    ['+15559876543'],
);
```

### Phone Numbers

[](#phone-numbers)

```
// List all phone numbers
$numbers = $quo->phoneNumbers()->list();

// List phone numbers for a user
$numbers = $quo->phoneNumbers()->list('US123');

// Get a phone number
$number = $quo->phoneNumbers()->find('PN123');
```

### Users

[](#users)

```
// List users
$result = $quo->users()->list(['maxResults' => 50]);

// Get a user
$user = $quo->users()->find('US123');
```

### Webhooks

[](#webhooks)

```
// List webhooks
$webhooks = $quo->webhooks()->list();

// Get a webhook
$webhook = $quo->webhooks()->find('WH123');

// Create webhooks for different resources
$webhook = $quo->webhooks()->createForCalls('https://example.com/hook', ['call.completed']);
$webhook = $quo->webhooks()->createForMessages('https://example.com/hook', ['message.received']);
$webhook = $quo->webhooks()->createForCallSummaries('https://example.com/hook', ['call.summary.completed']);
$webhook = $quo->webhooks()->createForCallTranscripts('https://example.com/hook', ['call.transcript.completed']);

// Delete a webhook
$quo->webhooks()->delete('WH123');
```

---

Error Handling
--------------

[](#error-handling)

All API errors throw `QuoApiException`:

```
use Blamodex\Quo\Exceptions\QuoApiException;

try {
    $call = $quo->calls()->find('AC_invalid');
} catch (QuoApiException $e) {
    $e->getMessage();   // "Call not found"
    $e->statusCode;     // 404
    $e->errorCode;      // "0900404"
    $e->docs;           // "https://docs.openphone.com/..."
    $e->getPrevious();  // Original exception (for connection failures)
}
```

Connection failures (timeouts, DNS errors) are also wrapped in `QuoApiException` with `statusCode: 0`.

---

Testing
-------

[](#testing)

This package uses [Orchestra Testbench](https://github.com/orchestral/testbench) and [PHPUnit](https://phpunit.de/).

Run tests:

```
composer test
```

Check code style:

```
composer lint
```

Run static analysis:

```
composer analyze
```

Check coverage (with Xdebug):

```
composer test:coverage
```

Run all QA checks:

```
composer qa
```

---

Project Structure
-----------------

[](#project-structure)

```
src/
├── QuoServiceProvider.php
├── config/
│   └── quo.php
├── Services/
│   ├── QuoService.php
│   ├── CallService.php
│   ├── ContactService.php
│   ├── ConversationService.php
│   ├── MessageService.php
│   ├── PhoneNumberService.php
│   ├── UserService.php
│   ├── WebhookService.php
│   └── Concerns/
│       └── MakesRequests.php
├── Data/
│   ├── CallData.php
│   ├── CallRecordingData.php
│   ├── CallSummaryData.php
│   ├── CallTranscriptData.php
│   ├── CallVoicemailData.php
│   ├── ContactCustomFieldData.php
│   ├── ContactData.php
│   ├── ConversationData.php
│   ├── DialogueSegmentData.php
│   ├── MessageData.php
│   ├── PhoneNumberData.php
│   ├── UserData.php
│   └── WebhookData.php
└── Exceptions/
    └── QuoApiException.php

tests/
├── TestCase.php
└── Unit/
    ├── CallServiceTest.php
    ├── ContactServiceTest.php
    ├── ConversationServiceTest.php
    ├── MessageServiceTest.php
    ├── PhoneNumberServiceTest.php
    ├── QuoServiceTest.php
    ├── UserServiceTest.php
    └── WebhookServiceTest.php

```

---

Contributing
------------

[](#contributing)

We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details.

---

Changelog
---------

[](#changelog)

Please see [CHANGELOG.md](CHANGELOG.md) for recent changes.

---

License
-------

[](#license)

MIT. See the [LICENSE](LICENSE) file.

---

Links
-----

[](#links)

- [Report a Bug](https://github.com/blamodex/laravel-quo/issues)
- [Request a Feature](https://github.com/blamodex/laravel-quo/issues)
- [View Changelog](CHANGELOG.md)
- [Quo API Documentation](https://www.quo.com/docs/mdx/api-reference/introduction)

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance90

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity47

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 80% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

52d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/237417796?v=4)[blamodex](/maintainers/blamodex)[@blamodex](https://github.com/blamodex)

---

Top Contributors

[![blackmage-codex](https://avatars.githubusercontent.com/u/218423009?v=4)](https://github.com/blackmage-codex "blackmage-codex (4 commits)")[![semantic-release-bot](https://avatars.githubusercontent.com/u/32174276?v=4)](https://github.com/semantic-release-bot "semantic-release-bot (1 commits)")

---

Tags

apilaravelcallstelephonyquoopenphone

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/blamodex-laravel-quo/health.svg)

```
[![Health](https://phpackages.com/badges/blamodex-laravel-quo/health.svg)](https://phpackages.com/packages/blamodex-laravel-quo)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3345.3M347](/packages/psalm-plugin-laravel)[api-platform/laravel

API Platform support for Laravel

58174.6k17](/packages/api-platform-laravel)[mike-bronner/laravel-model-caching

Automatic caching for Eloquent models.

2.4k96.5k1](/packages/mike-bronner-laravel-model-caching)[defstudio/telegraph

A laravel facade to interact with Telegram Bots

813336.8k3](/packages/defstudio-telegraph)[simplestats-io/laravel-client

Server-side analytics for Laravel that follows the full funnel from visit to registration to payment, attributed to the channel that drove it. Revenue, MRR, churn and ad-spend profit (ROAS/CAC) per channel. GDPR compliant, ad-blocker proof.

5022.6k](/packages/simplestats-io-laravel-client)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

255.2k](/packages/aedart-athenaeum)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
