Skip to content

Client serveur ​

Référence des sous-clients de MitoeraClient. Les deux SDK exposent les mêmes noms de méthodes ; seules la syntaxe et la nature du retour (Promise en JS, valeur directe en PHP) diffèrent.

client.holds · client.sessions · client.events · client.charts
client.categories · client.apiKeys · client.workspaces · client.reporting

holds ​

Le cycle de vie des sièges. Toutes les méthodes prennent le holdToken de la session concernée.

MéthodeRetourDescription
hold(eventId, seatKeys, holdToken)HoldResponseBloque temporairement des sièges
book(eventId, seatKeys, holdToken)BookResponseConfirme la réservation
release(eventId, seatKeys, holdToken)—Libère des sièges
changeStatus(eventId, seatKeys, status)—Force un statut (available, hold, booked, canceled)
ts
const hold = await client.holds.hold(eventId, ['A-1', 'A-2'], holdToken);
hold.holdToken;        // string
hold.seatKeys;         // string[]
hold.expiresAt;        // Date
hold.durationSeconds;  // number

const book = await client.holds.book(eventId, ['A-1', 'A-2'], holdToken);
book.bookedSeats;      // string[]
book.eventId;          // string
book.bookedAt;         // Date

await client.holds.release(eventId, ['A-1'], holdToken);
await client.holds.changeStatus(eventId, ['A-3'], 'canceled');
php
$hold = $client->holds->hold($eventId, ['A-1', 'A-2'], $holdToken);
$hold->holdToken;        // string
$hold->seatKeys;         // string[]
$hold->expiresAt;        // DateTimeImmutable
$hold->durationSeconds;  // int

$book = $client->holds->book($eventId, ['A-1', 'A-2'], $holdToken);
$book->bookedSeats;      // string[]
$book->eventId;          // string
$book->bookedAt;         // DateTimeImmutable

$client->holds->release($eventId, ['A-1'], $holdToken);
$client->holds->changeStatus($eventId, ['A-3'], 'canceled');

sessions ​

MéthodeRetourDescription
create(eventId)SessionResponseOuvre une session pour un événement
refresh(sessionToken)SessionResponseProlonge une session
ts
const session = await client.sessions.create(eventId);
session.sessionToken;  // à transmettre au widget
session.holdToken;     // à garder côté serveur
session.expiresIn;     // secondes

const renewed = await client.sessions.refresh(session.sessionToken);
php
$session = $client->sessions->create($eventId);
$session->sessionToken;  // à transmettre au widget
$session->holdToken;     // à garder côté serveur
$session->expiresIn;     // secondes

$renewed = $client->sessions->refresh($session->sessionToken);

events ​

MéthodeRetourDescription
listAll()EventResponse[]Tous les événements du workspace
get(eventId)EventResponseUn événement par UUID
findByIdentifier(identifier)EventResponseUn événement par slug
listSeats(eventId, seatKeys?)SeatStatusMapStatuts des sièges
bulkUpdateSeats(eventId, seatKeys, status)intChange le statut en masse, renvoie le nombre de sièges touchés
create(title, identifier, chartId?)EventResponseCrée un événement
update(eventId, fields)EventResponseMet à jour titre et identifiant
linkChart(eventId, chartId)—Associe un plan publié
delete(eventId)—Supprime l'événement

SeatStatusMap ​

listSeats() ne renvoie pas un tableau brut mais un objet interrogeable :

ts
const map = await client.events.listSeats(eventId);

map.available();          // string[]
map.held();               // string[]
map.booked();             // string[]
map.isAvailable('A-1');   // boolean

for (const [seatKey, status] of map) {
  console.log(seatKey, status);
}
php
$map = $client->events->listSeats($eventId);

$map->available();          // string[]
$map->held();               // string[]
$map->booked();             // string[]
$map->isAvailable('A-1');   // bool

foreach ($map as $seatKey => $status) {
    echo "$seatKey : $status\n";
}

held() interroge le statut hold

Le nom de la méthode et la valeur transmise par l'API diffèrent : map.held() renvoie les sièges dont le statut vaut hold. Si vous comparez les statuts à la main plutôt que par ces méthodes, c'est 'hold' qu'il faut tester, jamais 'held'.

Passer seatKeys en second argument limite la réponse à ces sièges — utile pour vérifier une poignée de places sans rapatrier une salle entière. Effet de bord utile : un siège du plan jamais manipulé est créé en available au lieu d'être absent de la réponse.

Sous le capot, l'API renvoie un objet indexé par clé de siège (voir Événements) ; SeatStatusMap encapsule cette forme pour vous éviter de la manipuler directement.

charts ​

MéthodeRetourDescription
listAll()ChartResponse[]Tous les plans du workspace
get(chartId)ChartResponseUn plan par UUID
create(name)ChartResponseCrée un plan vide
update(chartId, fields)ChartResponseRenomme, modifie
setObjects(chartId, objects)ChartResponseRemplace les objets du plan (sièges, rangées, formes)
publish(chartId)ChartResponsePublie le plan
markPending(chartId)ChartResponseRepasse le plan en attente de republication
delete(chartId)—Supprime le plan

Le SDK PHP expose en plus archive(chartId).

ts
const chart = await client.charts.create('Salle Olympia');
await client.charts.setObjects(chart.id, objects);
await client.charts.publish(chart.id);

chart.status;          // 'draft' | 'published' | 'archived'
chart.pendingChanges;  // boolean — modifié depuis la dernière publication
php
$chart = $client->charts->create('Salle Olympia');
$client->charts->setObjects($chart->id, $objects);
$client->charts->publish($chart->id);

$chart->isPublished();   // bool
$chart->isDraft();       // bool
$chart->pendingChanges;  // bool

categories ​

Les catégories sont rattachées à un plan : toutes les méthodes prennent un chartId.

MéthodeRetourDescription
listForChart(chartId)CategoryResponse[]Catégories du plan
get(chartId, categoryKey)CategoryResponseUne catégorie
create(chartId, name, color, …)CategoryResponseCrée une catégorie
update(chartId, categoryKey, fields)CategoryResponseModifie nom et couleur
delete(chartId, categoryKey)—Supprime la catégorie

En PHP, create() accepte deux paramètres supplémentaires : ?string $key = null et int|float $price = 0. Le prix est ignoré par l'API — le modèle de catégorie ne comporte aucun champ de tarif.

ts
await client.categories.create(chartId, 'Carré Or', '#E8602A');
await client.categories.update(chartId, categoryKey, { name: 'Carré Or+' });
php
$client->categories->create($chartId, 'Carré Or', '#E8602A');
$client->categories->update($chartId, $categoryKey, ['name' => 'Carré Or+']);

apiKeys ​

MéthodeRetourDescription
listAll()ApiKeyResponse[]Clés du workspace (sans les secrets)
create(name, scope)ApiKeyCreatedResponseCrée une clé — scope vaut PUBLIC ou BACKOFFICE
delete(apiKeyId)—Révoque une clé, avec effet immédiat

Le secret n'est renvoyé qu'à la création. Il n'existe aucun moyen de le relire ensuite.

workspaces ​

MéthodeRetourDescription
listAll()WorkspaceResponse[]Workspaces accessibles
getCurrent()WorkspaceResponseWorkspace de la clé courante
create(name)WorkspaceResponseCrée un workspace
switchTo(workspaceId)WorkspaceResponseBascule le contexte
invite(email, role)—Invite un membre — role vaut MEMBER par défaut
listMembers()WorkspaceMember[]Membres du workspace

reporting ​

MéthodeRetourDescription
monthly(…)MonthlyUsage[]Sièges vendus par mois
byEvent(…)EventUsage[]Sièges vendus par événement
seatList(eventId)objectDétail des sièges d'un événement
workspaces(…)WorkspaceUsage[]Consommation par workspace

Les filtres se passent par objet nommé en JS ({ year, month, userId }) et par arguments positionnels en PHP (monthly(?string $userId, ?int $year)).

Exceptions ​

ClasseLevée quand
AuthExceptionClé absente, mal formée, invalide ou révoquée — 401 et 403
ApiExceptionToute autre erreur renvoyée par l'API — porte statusCode et le message serveur
MitoeraExceptionRacine de la hiérarchie

En PHP (SDK ≥ v1.0.1), AuthException hérite d'ApiException :

AuthException  ⟶  ApiException  ⟶  MitoeraException  ⟶  RuntimeException

Conséquence : ordonnez toujours les catch du plus spécifique au plus général, sinon le bloc AuthException devient inatteignable. statusCode vaut 0 pour les erreurs de configuration levées avant tout appel réseau.

Voir Codes d'erreur pour la correspondance entre statusCode et cause.

API, SDK et widget de plans de salle.