PHPackages                             fuitad/gazelle - 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. fuitad/gazelle

ActiveLibrary[API Development](/categories/api)

fuitad/gazelle
==============

PHP library for the Kitsu API (zou), based on the gazu python library

1.0.1(2mo ago)0101MITPHPPHP ^8.1

Since Feb 26Pushed 2mo agoCompare

[ Source](https://github.com/Fuitad/gazelle)[ Packagist](https://packagist.org/packages/fuitad/gazelle)[ Docs](https://github.com/fuitad/gazelle)[ RSS](/packages/fuitad-gazelle/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (2)Versions (3)Used By (1)

Gazelle
=======

[](#gazelle)

A PHP client library for the [Kitsu](https://kitsu.cg-wire.com) / [Zou](https://github.com/cgwire/zou) production tracker API. Based on the gazu python library.

Requirements
------------

[](#requirements)

- PHP 8.1+
- [Guzzle HTTP](https://docs.guzzlephp.org/) 7.x (installed automatically via Composer)

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

[](#installation)

```
composer require fuitad/gazelle
```

Quick Start
-----------

[](#quick-start)

```
use Gazelle\Gazelle;

$gazelle = new Gazelle('https://your-kitsu-server.example.com/api');

// Authenticate
$gazelle->logIn('user@example.com', 'password');

// List all open projects
$projects = $gazelle->project->allOpenProjects();

// Get all shots for a project
$shots = $gazelle->shot->allShotsForProject($projects[0]);

// Log out
$gazelle->logOut();
```

Modules
-------

[](#modules)

Every module is accessible as a public property on the `Gazelle` instance.

PropertyDescription`$gazelle->asset`Assets, asset types, asset instances`$gazelle->shot`Shots, sequences, episodes`$gazelle->scene`Scenes, asset instances, camera instances`$gazelle->task`Tasks, task types, task statuses, comments`$gazelle->project`Projects, project settings, team management`$gazelle->person`People, departments, avatars`$gazelle->user`Current-user-scoped queries`$gazelle->files`Output files, working files, preview files, softwares`$gazelle->casting`Shot / asset / episode casting`$gazelle->edit`Edits`$gazelle->entity`Generic entities and entity types`$gazelle->studio`Studios`$gazelle->sync`Event feed, project export / import`$gazelle->playlist`Playlists`$gazelle->concept`Concepts`$gazelle->context`Admin/user-context-aware convenience wrappersModel Parameters
----------------

[](#model-parameters)

All methods that accept a model (project, shot, asset, etc.) accept either:

- A UUID string: `'550e8400-e29b-41d4-a716-446655440000'`
- An associative array with at least an `'id'` key: `['id' => '550e8400-...', 'name' => 'My Project']`

This means you can pass model arrays directly from previous API calls.

Authentication
--------------

[](#authentication)

```
// Password login
$tokens = $gazelle->logIn('user@example.com', 'password');

// MFA (TOTP)
$tokens = $gazelle->logIn('user@example.com', 'password', totp: '123456');

// Use an existing token
$gazelle->setToken('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...');

// Or with refresh token
$gazelle->setToken([
    'access_token'  => 'eyJ...',
    'refresh_token' => 'eyJ...',
]);

// Refresh the access token manually
$gazelle->refreshAccessToken();

// Log out
$gazelle->logOut();
```

See [docs/authentication.md](docs/authentication.md) for the full reference.

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

[](#configuration)

```
$gazelle = new Gazelle(
    host: 'https://kitsu.example.com/api',
    sslVerify: true,                          // Verify SSL certificates
    useRefreshToken: true,                    // Auto-refresh on token expiry
    callbackNotAuthenticated: function($client, $path) {
        // Called when a 401 is received.
        // Return true to retry the request, false to throw NotAuthenticatedException.
        return false;
    },
);

// Change host at runtime
$gazelle->setHost('https://other-kitsu.example.com/api');

// Check connectivity
$gazelle->hostIsUp();    // bool
$gazelle->hostIsValid(); // bool (checks /api endpoint responds)
```

Exceptions
----------

[](#exceptions)

All exceptions live under `Gazelle\Exception\`.

ExceptionHTTP statusMeaning`AuthFailedException`—Login credentials rejected`NotAuthenticatedException`401 / 422Not authenticated`NotAllowedException`403Insufficient permissions`RouteNotFoundException`404Endpoint not found`MethodNotAllowedException`405Wrong HTTP method`ParameterException`400Bad request / missing field`TooBigFileException`413Upload too large`ServerErrorException`500 / 502Server-side error`UploadFailedException`—File upload rejected`DownloadFileException`—File download failed`FileDoesntExistException`—Local file not found before upload`TaskStatusNotFoundException`—Task status ID not in the server list`TaskMustBeAnArrayException`—Task passed as string where array requiredDocumentation
-------------

[](#documentation)

- [Authentication](docs/authentication.md)
- [Asset](docs/asset.md)
- [Shot](docs/shot.md)
- [Scene](docs/scene.md)
- [Task](docs/task.md)
- [Project](docs/project.md)
- [Person](docs/person.md)
- [User](docs/user.md)
- [Files](docs/files.md)
- [Casting](docs/casting.md)
- [Edit](docs/edit.md)
- [Entity](docs/entity.md)
- [Studio](docs/studio.md)
- [Sync](docs/sync.md)
- [Playlist](docs/playlist.md)
- [Concept](docs/concept.md)
- [Context](docs/context.md)

Testing
-------

[](#testing)

```
composer install
./vendor/bin/phpunit
```

Related Projects
----------------

[](#related-projects)

- [gazu](https://github.com/cgwire/gazu) — Official Python client (this library mirrors its API)
- [zou](https://github.com/cgwire/zou) — The Kitsu back-end
- [Kitsu](https://kitsu.cg-wire.com) — The production tracker UI

License
-------

[](#license)

MIT

###  Health Score

37

—

LowBetter than 83% of packages

Maintenance85

Actively maintained with recent releases

Popularity5

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity44

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% 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

Every ~0 days

Total

2

Last Release

79d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/a64852765202368cc8417b043a766fe724c4fc3bbfa959d850f8820a6653cd96?d=identicon)[Fuitad](/maintainers/Fuitad)

---

Top Contributors

[![Fuitad](https://avatars.githubusercontent.com/u/263288?v=4)](https://github.com/Fuitad "Fuitad (3 commits)")

---

Tags

animationpipelinekitsuzoucgwirevfx

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/fuitad-gazelle/health.svg)

```
[![Health](https://phpackages.com/badges/fuitad-gazelle/health.svg)](https://phpackages.com/packages/fuitad-gazelle)
```

###  Alternatives

[tencentcloud/tencentcloud-sdk-php

TencentCloudApi php sdk

3731.2M42](/packages/tencentcloud-tencentcloud-sdk-php)[pipedrive/pipedrive

Pipedrive REST client for PHP

601.2M](/packages/pipedrive-pipedrive)[convertkit/convertkitapi

Kit PHP SDK for the Kit API

2167.1k1](/packages/convertkit-convertkitapi)[mapado/rest-client-sdk

Rest Client SDK for hydra API

1125.9k2](/packages/mapado-rest-client-sdk)

PHPackages © 2026

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