Parcourir la documentation

Tickets, clés SSH et compte

Tickets

GET /tickets

Permissions : tickets:read

ParamètreTypeRequisValeurs
limitentiernon, défaut 201 à 100
cursorstringnoncurseur à décalage
statusstringnonOPEN, IN_PROGRESS, WAITING_CUSTOMER, WAITING_SUPPORT, RESOLVED, CLOSED

Trié sur la dernière mise à jour, pas sur la date de création.

ChampTypeNotes
ticketNumberstringidentifiant de toutes les routes de ticket
subjectstring
statusstringvoir les valeurs ci-dessus
prioritystringLOW, MEDIUM, HIGH, URGENT
categorystringGENERAL, TECHNICAL, BILLING, ACCOUNT
serviceCodestring ou nullle service concerné
createdAt, updatedAtentiermillisecondes epoch
lastMessageAtentier ou nullmillisecondes epoch
messageCountentier
unreadbooléenle support a écrit quelque chose que vous n'avez pas lu

GET /tickets/{ticketNumber}

Permissions : tickets:read

Cet appel marque le ticket comme lu.

Reprend les champs du résumé, sans unread ni messageCount, et ajoute :

ChampTypeNotes
descriptionstringle premier message, repris tel quel
closedAtentier ou nullmillisecondes epoch
messages[]tableaula conversation, dans l'ordre
Champ de messages[]TypeNotes
identier
senderstringCUSTOMER, SUPPORT, SYSTEM
contentstring
attachmentsentierle nombre de pièces jointes. Elles se téléchargent depuis le tableau de bord
createdAtentiermillisecondes epoch

POST /tickets

Permissions : tickets:write

ChampTypeRequisValeursD'où il vient
subjectstringoui200 caractères au plus-
messagestringoui10 000 caractères au plus-
categorystring ou nullnon, défaut GENERALGENERAL, TECHNICAL, BILLING, ACCOUNT-
prioritystring ou nullnon, défaut MEDIUMLOW, MEDIUM, HIGH, URGENT-
serviceCodestring ou nullnon-GET /servicescode

Une valeur hors énumération répond 400 VALIDATION_ERROR:category ou 400 VALIDATION_ERROR:priority, jamais la valeur par défaut.

curl -X POST -H "Authorization: Bearer $FRESHPERF_KEY" \
     -H "Content-Type: application/json" \
     -d '{"subject":"Disque plein","message":"Le disque est plein depuis ce matin.","category":"TECHNICAL","priority":"HIGH","serviceCode":"SRV-TJUAQ1-1951"}' \
     https://api.freshperf.fr/v1/tickets

Répond 201 avec le ticket complet, messages[] compris.

ErreurStatutQuand
VALIDATION_ERROR:subject400vide, ou au-delà de 200 caractères
VALIDATION_ERROR:message400vide, ou au-delà de 10 000 caractères
VALIDATION_ERROR:category, VALIDATION_ERROR:priority400valeur hors énumération
SUBJECT_TOO_SHORT400sujet trop court pour le support
SERVICE_NOT_FOUND404serviceCode inconnu, ou hors de la portée de la clé

POST /tickets/{ticketNumber}/messages

Permissions : tickets:write

ChampTypeRequisValeurs
messagestringoui10 000 caractères au plus

Répond 201 avec le message créé. Répondre à un ticket fermé le rouvre.

POST /tickets/{ticketNumber}/close

Permissions : tickets:write

Sans corps. Répond 200 avec le résumé du ticket, status à CLOSED.

Clés SSH

Les clés SSH du compte sont proposées au moment de commander un VPS. Une clé retirée reste installée sur les serveurs déjà provisionnés jusqu'à leur réinstallation.

GET /ssh-keys et GET /ssh-keys/{id}

Permissions : account.ssh_keys:read

Liste complète, sans pagination.

ChampTypeNotes
identierà repasser dans la suppression
labelstring
keyTypestring ou nullex. ssh-ed25519
fingerprintstring ou nullSHA-256 en hexadécimal
commentstring ou nullle commentaire de fin de ligne
publicKeystring ou nullla ligne complète. Présente sur la lecture unitaire et sur la création, null dans la liste
createdAtentiermillisecondes epoch
lastUsedAtentier ou nullmillisecondes epoch

POST /ssh-keys

Permissions : account.ssh_keys:write

ChampTypeRequisValeurs
labelstringoui-
publicKeystringouiune ligne de clé publique OpenSSH
curl -X POST -H "Authorization: Bearer $FRESHPERF_KEY" \
     -H "Content-Type: application/json" \
     -d '{"label":"portable","publicKey":"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... admin@laptop"}' \
     https://api.freshperf.fr/v1/ssh-keys

Répond 201 avec la clé, publicKey compris.

ErreurStatutQuand
SSH_KEY_FORMAT_INVALID400ce n'est pas une ligne de clé publique
DUPLICATE_KEY:<id>400la même clé est déjà sur le compte. Le suffixe donne son id

DELETE /ssh-keys/{id}

Permissions : account.ssh_keys:write

{ "data": { "deleted": true } }

Un id inconnu répond 404 SSH_KEY_NOT_FOUND.

Compte

GET /me

Permissions : account:read

Le compte et la clé qui appelle.

Champ de accountTypeNotes
identier
emailstring
firstName, lastNamestring ou null
companybooléenle compte est enregistré comme société
companyNamestring ou null
countrystring ou nullISO 3166-1 alpha-2
createdAtentiermillisecondes epoch
emailVerified, twoFactorEnabledbooléen
Champ de keyTypeNotes
identier
labelstring
keyPrefixstringfpk_ + 8 caractères
scopestableau de stringles permissions portées
allServicesbooléen
serviceCodestableau de stringvide quand allServices vaut true
ipAllowlisttableau de stringvide quand toute adresse est acceptée
expiresAtentier ou nullmillisecondes epoch
spendingCapCentsentier ou nullnull sans plafond
spendingRemainingCentsentier ou nullce qu'il reste sur la fenêtre de 30 jours

GET /me/key

Aucune permission requise. Toute clé valable peut demander ce qu'elle est.

Rend le seul bloc key ci-dessus. Utile pour vérifier au démarrage qu'une clé porte encore ce que votre intégration attend.

GET /account/notifications

Permissions : account.notifications:read

ParamètreTypeRequisValeurs
pageentiernon, défaut 11 ou plus. 0 répond 400 VALIDATION_ERROR:page
limitentiernon, défaut 201 à 50
unreadOnlystringnontrue pour ne lister que les non lues. Toute autre valeur vaut false

L'enveloppe n'est pas celle des autres listes : pas de bloc pagination.

{ "data": {
  "total": 27,
  "unread": 4,
  "items": [
    { "id": 167, "type": "api_key_created", "kind": "security", "read": false,
      "link": "/dashboard/api-keys", "createdAt": 1787906983422,
      "title": { "fr-fr": "Clé d'API créée", "en-us": "API key created" },
      "message": { "fr-fr": "La clé « backup-cron » a été créée sur votre compte." } }
  ]
} }
ChampTypeNotes
totalentierle total du filtre demandé : avec unreadOnly=true, c'est le nombre de non lues
unreadentiertoujours le nombre de non lues
items[].title, items[].messageobjet locale → texte, ou null
items[].linkstring ou nullchemin dans le tableau de bord

GET /account/access

Permissions : account.access:read

Qui a un accès délégué au compte. Lecture seule : les invitations se gèrent dans le tableau de bord.

ChampTypeNotes
identier
statusstringPENDING, ACCEPTED, DECLINED, REVOKED, EXPIRED
invitedEmailstringl'adresse invitée
granteeNamestring ou nullrenseigné une fois l'invitation acceptée
accountPermissionstableau de stringACCOUNT_TICKETS_VIEW, ACCOUNT_TICKETS_MANAGE
services[]tableauserviceCode plus permissions
services[].permissionstableau de stringSERVICE_POWER, SERVICE_CONSOLE, SERVICE_FILES, SERVICE_BACKUPS, SERVICE_DATABASES, SERVICE_ALLOCATIONS, SERVICE_SCHEDULES, SERVICE_STARTUP, SERVICE_VERSIONS, SERVICE_CONTENT, SERVICE_SUBDOMAINS, SERVICE_REINSTALL, SERVICE_FIREWALL, SERVICE_RDNS, SERVICE_SFTP
createdAtentiermillisecondes epoch
acceptedAtentier ou nullmillisecondes epoch

Les invitations révoquées ne sont pas listées.

    Tickets, clés SSH et compte | FreshPerf