Skip to content

Tableau de bord ​

Les routes sont relatives à <PUBLIC_BASE_URL> ; les corps de requête et de réponse sont en JSON sauf mention contraire. L’authentification, les portées, la pagination et le format des erreurs sont décrits dans les guides de l’API REST.

GET /api/v1/dashboard/executions ​

Tableau de bord : exécutions

Volumes, taux de réussite, série par statut, workflows les plus actifs et les plus en échec, derniers échecs. scope=org et memberId sont réservés aux administrateurs ; les séries suivent le tz du lecteur.

Accès — Session de membre ou clé d’API portant dashboard:read.

Paramètres

NomOùTypeRequis
scoperequête"me" | "org"non
periodrequête"24h" | "7d" | "30d" | "custom"non
fromrequêtestring (date-time)non
torequêtestring (date-time)non
tzrequêtestringnon
mailboxIdrequêtestring (uuid)non
workflowIdrequêtestring (uuid)non
memberIdrequêtestring (uuid)non

Réponses

200 — Les chiffres.

ChampTypeRequis
windowobjectoui
currentobjectoui
previousobjectoui
seriesobject[]oui
topWorkflowsobject[]oui
failingWorkflowsobject[]oui
recentFailuresobject[]oui
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "window": {
      "type": "object",
      "properties": {
        "from": { "type": "string" },
        "to": { "type": "string" },
        "previousFrom": { "type": "string" },
        "bucket": { "type": "string", "enum": [ "hour", "day" ] },
        "buckets": { "type": "array", "items": { "type": "string" } }
      },
      "required": [ "from", "to", "previousFrom", "bucket", "buckets" ],
      "additionalProperties": false
    },
    "current": {
      "type": "object",
      "properties": {
        "total": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
        "byStatus": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "queued",
                  "running",
                  "waiting",
                  "succeeded",
                  "failed",
                  "cancelled"
                ]
              },
              "count": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
            },
            "required": [ "status", "count" ],
            "additionalProperties": false
          }
        },
        "successRate": {
          "anyOf": [
            { "type": "number", "minimum": 0, "maximum": 1 },
            { "type": "null" }
          ]
        },
        "medianDurationMs": { "anyOf": [ { "type": "number", "minimum": 0 }, { "type": "null" } ] }
      },
      "required": [ "total", "byStatus", "successRate", "medianDurationMs" ],
      "additionalProperties": false
    },
    "previous": {
      "type": "object",
      "properties": {
        "total": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
        "byStatus": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "queued",
                  "running",
                  "waiting",
                  "succeeded",
                  "failed",
                  "cancelled"
                ]
              },
              "count": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
            },
            "required": [ "status", "count" ],
            "additionalProperties": false
          }
        },
        "successRate": {
          "anyOf": [
            { "type": "number", "minimum": 0, "maximum": 1 },
            { "type": "null" }
          ]
        },
        "medianDurationMs": { "anyOf": [ { "type": "number", "minimum": 0 }, { "type": "null" } ] }
      },
      "required": [ "total", "byStatus", "successRate", "medianDurationMs" ],
      "additionalProperties": false
    },
    "series": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "queued",
              "running",
              "waiting",
              "succeeded",
              "failed",
              "cancelled"
            ]
          },
          "values": {
            "type": "array",
            "items": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
          }
        },
        "required": [ "status", "values" ],
        "additionalProperties": false
      }
    },
    "topWorkflows": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "workflowId": { "type": "string" },
          "name": { "type": "string" },
          "memberName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "total": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
          "succeeded": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
          "failed": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
          "lastRunAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }
        },
        "required": [
          "workflowId",
          "name",
          "memberName",
          "total",
          "succeeded",
          "failed",
          "lastRunAt"
        ],
        "additionalProperties": false
      }
    },
    "failingWorkflows": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "workflowId": { "type": "string" },
          "name": { "type": "string" },
          "memberName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "total": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
          "succeeded": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
          "failed": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
          "lastRunAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }
        },
        "required": [
          "workflowId",
          "name",
          "memberName",
          "total",
          "succeeded",
          "failed",
          "lastRunAt"
        ],
        "additionalProperties": false
      }
    },
    "recentFailures": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "executionId": { "type": "string" },
          "workflowId": { "type": "string" },
          "workflowName": { "type": "string" },
          "memberName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "failedAt": { "type": "string" },
          "errorCode": { "type": "string" },
          "errorSummary": { "type": "string" },
          "nodeId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "nodeName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "acknowledged": { "type": "boolean" }
        },
        "required": [
          "executionId",
          "workflowId",
          "workflowName",
          "memberName",
          "failedAt",
          "errorCode",
          "errorSummary",
          "nodeId",
          "nodeName",
          "acknowledged"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "window",
    "current",
    "previous",
    "series",
    "topWorkflows",
    "failingWorkflows",
    "recentFailures"
  ],
  "additionalProperties": false
}

400 — La requête ne respecte pas son schéma.

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

Codes d’erreur — dashboard.bad_request, dashboard.forbidden. Les codes communs (request.bad_request, auth.unauthenticated, api_key.scope_missing, api_key.rate_limited…) s’appliquent à toutes les routes ; voir Erreurs.

GET /api/v1/dashboard/mail ​

Tableau de bord : courrier

Mails reçus par issue, automatisés, et sortants, sur la période.

Accès — Session de membre ou clé d’API portant dashboard:read.

Paramètres

NomOùTypeRequis
scoperequête"me" | "org"non
periodrequête"24h" | "7d" | "30d" | "custom"non
fromrequêtestring (date-time)non
torequêtestring (date-time)non
tzrequêtestringnon
mailboxIdrequêtestring (uuid)non
workflowIdrequêtestring (uuid)non
memberIdrequêtestring (uuid)non

Réponses

200 — Les chiffres.

ChampTypeRequis
windowobjectoui
currentobjectoui
previousobjectoui
seriesobjectoui
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "window": {
      "type": "object",
      "properties": {
        "from": { "type": "string" },
        "to": { "type": "string" },
        "previousFrom": { "type": "string" },
        "bucket": { "type": "string", "enum": [ "hour", "day" ] },
        "buckets": { "type": "array", "items": { "type": "string" } }
      },
      "required": [ "from", "to", "previousFrom", "bucket", "buckets" ],
      "additionalProperties": false
    },
    "current": {
      "type": "object",
      "properties": {
        "received": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
        "byOutcome": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "outcome": {
                "type": "string",
                "enum": [
                  "excluded_org",
                  "excluded_member",
                  "guardrail",
                  "unmatched",
                  "dispatched"
                ]
              },
              "count": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
            },
            "required": [ "outcome", "count" ],
            "additionalProperties": false
          }
        },
        "automatedEmails": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
        "draftsPrepared": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
        "sentByWorkflows": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
      },
      "required": [
        "received",
        "byOutcome",
        "automatedEmails",
        "draftsPrepared",
        "sentByWorkflows"
      ],
      "additionalProperties": false
    },
    "previous": {
      "type": "object",
      "properties": {
        "received": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
        "byOutcome": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "outcome": {
                "type": "string",
                "enum": [
                  "excluded_org",
                  "excluded_member",
                  "guardrail",
                  "unmatched",
                  "dispatched"
                ]
              },
              "count": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
            },
            "required": [ "outcome", "count" ],
            "additionalProperties": false
          }
        },
        "automatedEmails": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
        "draftsPrepared": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
        "sentByWorkflows": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
      },
      "required": [
        "received",
        "byOutcome",
        "automatedEmails",
        "draftsPrepared",
        "sentByWorkflows"
      ],
      "additionalProperties": false
    },
    "series": {
      "type": "object",
      "properties": {
        "received": {
          "type": "array",
          "items": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
        },
        "dispatched": {
          "type": "array",
          "items": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
        }
      },
      "required": [ "received", "dispatched" ],
      "additionalProperties": false
    }
  },
  "required": [ "window", "current", "previous", "series" ],
  "additionalProperties": false
}

400 — La requête ne respecte pas son schéma.

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

Codes d’erreur — dashboard.bad_request, dashboard.forbidden. Les codes communs (request.bad_request, auth.unauthenticated, api_key.scope_missing, api_key.rate_limited…) s’appliquent à toutes les routes ; voir Erreurs.

GET /api/v1/dashboard/ai ​

Tableau de bord : coût de l’IA

La dépense d’IA, ventilée par modèle, usage et membre.

Accès — Session de membre ou clé d’API portant dashboard:read.

Paramètres

NomOùTypeRequis
scoperequête"me" | "org"non
periodrequête"24h" | "7d" | "30d" | "custom"non
fromrequêtestring (date-time)non
torequêtestring (date-time)non
tzrequêtestringnon
mailboxIdrequêtestring (uuid)non
workflowIdrequêtestring (uuid)non
memberIdrequêtestring (uuid)non

Réponses

200 — Les chiffres.

ChampTypeRequis
windowobjectoui
currentobjectoui
previousobjectoui
seriesnumber[]oui
byModelobject[]oui
byPurposeobject[]oui
byMemberobject[] | nulloui
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "window": {
      "type": "object",
      "properties": {
        "from": { "type": "string" },
        "to": { "type": "string" },
        "previousFrom": { "type": "string" },
        "bucket": { "type": "string", "enum": [ "hour", "day" ] },
        "buckets": { "type": "array", "items": { "type": "string" } }
      },
      "required": [ "from", "to", "previousFrom", "bucket", "buckets" ],
      "additionalProperties": false
    },
    "current": {
      "type": "object",
      "properties": {
        "costUsd": { "type": "number", "minimum": 0 },
        "calls": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
        "tokensIn": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
        "tokensOut": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
      },
      "required": [ "costUsd", "calls", "tokensIn", "tokensOut" ],
      "additionalProperties": false
    },
    "previous": {
      "type": "object",
      "properties": {
        "costUsd": { "type": "number", "minimum": 0 },
        "calls": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
        "tokensIn": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
        "tokensOut": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
      },
      "required": [ "costUsd", "calls", "tokensIn", "tokensOut" ],
      "additionalProperties": false
    },
    "series": { "type": "array", "items": { "type": "number", "minimum": 0 } },
    "byModel": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": { "type": "string" },
          "label": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "provider": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "costUsd": { "type": "number", "minimum": 0 },
          "calls": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
        },
        "required": [ "key", "label", "provider", "costUsd", "calls" ],
        "additionalProperties": false
      }
    },
    "byPurpose": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": { "type": "string" },
          "label": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "provider": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "costUsd": { "type": "number", "minimum": 0 },
          "calls": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
        },
        "required": [ "key", "label", "provider", "costUsd", "calls" ],
        "additionalProperties": false
      }
    },
    "byMember": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "key": { "type": "string" },
              "label": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
              "provider": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
              "costUsd": { "type": "number", "minimum": 0 },
              "calls": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
            },
            "required": [ "key", "label", "provider", "costUsd", "calls" ],
            "additionalProperties": false
          }
        },
        { "type": "null" }
      ]
    }
  },
  "required": [
    "window",
    "current",
    "previous",
    "series",
    "byModel",
    "byPurpose",
    "byMember"
  ],
  "additionalProperties": false
}

400 — La requête ne respecte pas son schéma.

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

Codes d’erreur — dashboard.bad_request, dashboard.forbidden. Les codes communs (request.bad_request, auth.unauthenticated, api_key.scope_missing, api_key.rate_limited…) s’appliquent à toutes les routes ; voir Erreurs.

GET /api/v1/dashboard/health ​

Tableau de bord : santé

Boîtes en erreur et connexions à renouveler.

Accès — Session de membre ou clé d’API portant dashboard:read.

Paramètres

NomOùTypeRequis
scoperequête"me" | "org"non
periodrequête"24h" | "7d" | "30d" | "custom"non
fromrequêtestring (date-time)non
torequêtestring (date-time)non
tzrequêtestringnon
mailboxIdrequêtestring (uuid)non
workflowIdrequêtestring (uuid)non
memberIdrequêtestring (uuid)non

Réponses

200 — Les chiffres.

ChampTypeRequis
mailboxesobject[]oui
connectionsobject[]oui
connectionsToRenewintegeroui
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "mailboxes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": { "type": "string" },
          "address": { "type": "string" },
          "provider": { "type": "string" },
          "status": { "type": "string", "enum": [ "active", "disconnected", "error" ] },
          "memberName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "errorKind": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "errorAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "backfillDone": { "type": "boolean" }
        },
        "required": [
          "id",
          "address",
          "provider",
          "status",
          "memberName",
          "errorKind",
          "errorAt",
          "backfillDone"
        ],
        "additionalProperties": false
      }
    },
    "connections": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": { "type": "string" },
          "name": { "type": "string" },
          "type": { "type": "string" },
          "status": { "type": "string", "enum": [ "expired", "revoked" ] },
          "ownerName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "updatedAt": { "type": "string" }
        },
        "required": [ "id", "name", "type", "status", "ownerName", "updatedAt" ],
        "additionalProperties": false
      }
    },
    "connectionsToRenew": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
  },
  "required": [ "mailboxes", "connections", "connectionsToRenew" ],
  "additionalProperties": false
}

400 — La requête ne respecte pas son schéma.

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

Codes d’erreur — dashboard.bad_request, dashboard.forbidden. Les codes communs (request.bad_request, auth.unauthenticated, api_key.scope_missing, api_key.rate_limited…) s’appliquent à toutes les routes ; voir Erreurs.

GET /api/v1/dashboard/members ​

Tableau de bord : membres

Activité par membre. Administrateurs seulement, en portée org.

Accès — Session de membre ou clé d’API portant dashboard:read.

Paramètres

NomOùTypeRequis
scoperequête"me" | "org"non
periodrequête"24h" | "7d" | "30d" | "custom"non
fromrequêtestring (date-time)non
torequêtestring (date-time)non
tzrequêtestringnon
mailboxIdrequêtestring (uuid)non
workflowIdrequêtestring (uuid)non
memberIdrequêtestring (uuid)non

Réponses

200 — Les chiffres.

ChampTypeRequis
windowobjectoui
totalintegeroui
activeintegeroui
suspendedintegeroui
itemsobject[]oui
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "window": {
      "type": "object",
      "properties": {
        "from": { "type": "string" },
        "to": { "type": "string" },
        "previousFrom": { "type": "string" },
        "bucket": { "type": "string", "enum": [ "hour", "day" ] },
        "buckets": { "type": "array", "items": { "type": "string" } }
      },
      "required": [ "from", "to", "previousFrom", "bucket", "buckets" ],
      "additionalProperties": false
    },
    "total": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
    "active": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
    "suspended": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "memberId": { "type": "string" },
          "name": { "type": "string" },
          "email": { "type": "string" },
          "role": { "type": "string", "enum": [ "member", "admin" ] },
          "status": { "type": "string", "enum": [ "active", "suspended" ] },
          "lastSeenAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "executions": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
          "failed": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
          "costUsd": { "type": "number", "minimum": 0 }
        },
        "required": [
          "memberId",
          "name",
          "email",
          "role",
          "status",
          "lastSeenAt",
          "executions",
          "failed",
          "costUsd"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [ "window", "total", "active", "suspended", "items" ],
  "additionalProperties": false
}

400 — La requête ne respecte pas son schéma.

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

Codes d’erreur — dashboard.bad_request, dashboard.forbidden. Les codes communs (request.bad_request, auth.unauthenticated, api_key.scope_missing, api_key.rate_limited…) s’appliquent à toutes les routes ; voir Erreurs.

GET /api/v1/dashboard/todo ​

Tableau de bord : ce qui m’attend

Approbations en attente, brouillons à relire, incidents ouverts. Toujours personnel : aucun filtre.

Accès — Session de membre ou clé d’API portant dashboard:read.

Réponses

200 — Les éléments en attente.

ChampTypeRequis
approvalsPendingintegeroui
reviewPendingintegeroui
incidentsUnacknowledgedintegeroui
itemsobject[]oui
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "approvalsPending": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
    "reviewPending": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
    "incidentsUnacknowledged": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "kind": { "type": "string", "enum": [ "approval", "review", "incident" ] },
          "id": { "type": "string" },
          "title": { "type": "string" },
          "workflowName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "workflowId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "executionId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "at": { "type": "string" }
        },
        "required": [
          "kind",
          "id",
          "title",
          "workflowName",
          "workflowId",
          "executionId",
          "at"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [ "approvalsPending", "reviewPending", "incidentsUnacknowledged", "items" ],
  "additionalProperties": false
}

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

GET /api/v1/dashboard/options ​

Tableau de bord : options des filtres

Les boîtes, workflows et membres qu’un filtre peut nommer. members est vide en portée me.

Accès — Session de membre ou clé d’API portant dashboard:read.

Paramètres

NomOùTypeRequis
scoperequête"me" | "org"non

Réponses

200 — Les options.

ChampTypeRequis
mailboxesobject[]oui
workflowsobject[]oui
membersobject[]oui
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "mailboxes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": { "type": "string" },
          "label": { "type": "string" },
          "memberName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }
        },
        "required": [ "id", "label", "memberName" ],
        "additionalProperties": false
      }
    },
    "workflows": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": { "type": "string" },
          "label": { "type": "string" },
          "memberName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }
        },
        "required": [ "id", "label", "memberName" ],
        "additionalProperties": false
      }
    },
    "members": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": { "type": "string" },
          "label": { "type": "string" },
          "memberName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }
        },
        "required": [ "id", "label", "memberName" ],
        "additionalProperties": false
      }
    }
  },
  "required": [ "mailboxes", "workflows", "members" ],
  "additionalProperties": false
}

400 — La requête ne respecte pas son schéma.

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

Codes d’erreur — dashboard.bad_request, dashboard.forbidden. Les codes communs (request.bad_request, auth.unauthenticated, api_key.scope_missing, api_key.rate_limited…) s’appliquent à toutes les routes ; voir Erreurs.

GET /api/v1/dashboard/layout ​

Lire ma disposition du tableau de bord

isDefault vaut vrai tant que le membre n’a rien enregistré : la disposition est alors celle de son rôle.

Accès — Session de membre ou clé d’API portant dashboard:read.

Réponses

200 — La disposition.

ChampTypeRequis
widgetsobject[]oui
minutesPerEmailnumberoui
isDefaultbooleanoui
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "widgets": {
      "maxItems": 11,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "enum": [
              "todo",
              "executionsKpis",
              "executionsTrend",
              "recentFailures",
              "topWorkflows",
              "mailFlow",
              "timeSaved",
              "mailboxHealth",
              "connections",
              "aiCost",
              "members"
            ]
          },
          "visible": { "type": "boolean" }
        },
        "required": [ "id", "visible" ],
        "additionalProperties": false
      }
    },
    "minutesPerEmail": { "type": "number", "minimum": 0, "maximum": 120 },
    "isDefault": { "type": "boolean" }
  },
  "required": [ "widgets", "minutesPerEmail", "isDefault" ],
  "additionalProperties": false
}

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

PUT /api/v1/dashboard/layout ​

Enregistrer ma disposition du tableau de bord

Les widgets, leur ordre et leur visibilité, et l’hypothèse de minutes par mail. Les widgets réservés aux administrateurs sont écartés pour les autres membres.

Accès — Session de membre ou clé d’API portant dashboard:write.

Corps de la requête (application/json)

ChampTypeRequis
widgetsobject[]oui
minutesPerEmailnumberoui
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "widgets": {
      "maxItems": 11,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "enum": [
              "todo",
              "executionsKpis",
              "executionsTrend",
              "recentFailures",
              "topWorkflows",
              "mailFlow",
              "timeSaved",
              "mailboxHealth",
              "connections",
              "aiCost",
              "members"
            ]
          },
          "visible": { "type": "boolean" }
        },
        "required": [ "id", "visible" ]
      }
    },
    "minutesPerEmail": { "type": "number", "minimum": 0, "maximum": 120 }
  },
  "required": [ "widgets", "minutesPerEmail" ]
}

Réponses

200 — La disposition, enregistrée.

ChampTypeRequis
widgetsobject[]oui
minutesPerEmailnumberoui
isDefaultbooleanoui

Même schéma que GET /api/v1/dashboard/layout.

400 — La requête ne respecte pas son schéma.

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

Codes d’erreur — dashboard.bad_request. Les codes communs (request.bad_request, auth.unauthenticated, api_key.scope_missing, api_key.rate_limited…) s’appliquent à toutes les routes ; voir Erreurs.

DELETE /api/v1/dashboard/layout ​

Réinitialiser ma disposition du tableau de bord

Retour à la disposition du rôle. La rend.

Accès — Session de membre ou clé d’API portant dashboard:write.

Réponses

200 — La disposition par défaut.

ChampTypeRequis
widgetsobject[]oui
minutesPerEmailnumberoui
isDefaultbooleanoui

Même schéma que GET /api/v1/dashboard/layout.

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.