MENU navbar-image

Introduction

Authentification

Tous les endpoints (sauf /ping) requièrent une clé API personnelle, disponible dans votre espace utilisateur → Mon compte.

La clé peut être transmise via l'en-tête Authorization: Bearer {VOTRE_CLE_API} ou X-API-Key: {VOTRE_CLE_API}.

Limites de débit (Rate limiting)

Formule Requêtes / minute
Free 60
Pro 600
Business 6000

Les en-têtes X-RateLimit-Limit et X-RateLimit-Remaining indiquent votre consommation. Au-delà, l'API renvoie 429.

Codes de réponse

Code Signification
200/201 Succès / Création
204 Suppression réussie
401 Non authentifié
402 Limite du plan atteinte
403 Module indisponible sur votre plan
404 Introuvable
429 Trop de requêtes

Exemple rapide

curl -H "Authorization: Bearer {VOTRE_CLE_API}" https://fassiki.com/api/v1/user

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {VOTRE_CLE_API}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

Récupérez votre clé API dans votre espace utilisateur → Mon compte. Vous pouvez l'envoyer via l'en-tête Authorization: Bearer <clé> ou X-API-Key: <clé>.

Analytics

Lister les sites analytics

requires authentication

Renvoie tous les sites web analytics de l'utilisateur authentifié, avec le nombre de visiteurs.

Example request:
curl --request GET \
    --get "https://fassiki.com/api/v1/analytics/websites" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://fassiki.com/api/v1/analytics/websites"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Liste):


{
    "data": [
        {
            "id": 1,
            "name": "Mon site",
            "host": "example.com",
            "tracking_type": "normal",
            "visitors_count": 0,
            "is_enabled": true
        }
    ]
}
 

Request      

GET api/v1/analytics/websites

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

Response

Response Fields

data   object[]     

Liste des sites.

Créer un site analytics

requires authentication

Crée un nouveau site web à tracker. Une pixel_key est générée automatiquement pour intégrer le script de tracking. Le plan doit avoir le module Analytics activé et ne pas avoir atteint sa limite de sites.

Example request:
curl --request POST \
    "https://fassiki.com/api/v1/analytics/websites" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Mon blog\",
    \"host\": \"example.com\",
    \"tracking_type\": \"normal\"
}"
const url = new URL(
    "https://fassiki.com/api/v1/analytics/websites"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Mon blog",
    "host": "example.com",
    "tracking_type": "normal"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201, Site créé):


{
    "id": 2,
    "name": "Mon blog",
    "host": "example.com",
    "pixel_key": "aB3x...",
    "tracking_type": "normal",
    "is_enabled": true
}
 

Example response (402, Limite atteinte):


{
    "message": "Limite de sites atteinte pour votre plan (1)."
}
 

Example response (403, Module désactivé):


{
    "message": "Votre plan ne permet pas d'accéder à cette ressource."
}
 

Request      

POST api/v1/analytics/websites

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Nom du site (max 64). Example: Mon blog

host   string     

Domaine/hôte du site (max 255). Example: example.com

tracking_type   string  optional    

Mode de suivi : normal (cookies) ou lightweight (sans cookies). Example: normal

Afficher un site analytics

requires authentication

Renvoie les détails d'un site analytics spécifique appartenant à l'utilisateur.

Example request:
curl --request GET \
    --get "https://fassiki.com/api/v1/analytics/websites/architecto" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://fassiki.com/api/v1/analytics/websites/architecto"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Site trouvé):


{
    "id": 1,
    "name": "Mon site",
    "host": "example.com",
    "tracking_type": "normal"
}
 

Example response (404, Introuvable):


{
    "message": "Ressource introuvable."
}
 

Request      

GET api/v1/analytics/websites/{id}

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the website. Example: architecto

website   integer     

Identifiant du site. Example: 1

Mettre à jour un site analytics

requires authentication

Met à jour les champs fournis d'un site analytics.

Example request:
curl --request PUT \
    "https://fassiki.com/api/v1/analytics/websites/architecto" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Nouveau nom\",
    \"host\": \"newdomain.com\",
    \"tracking_type\": \"normal\",
    \"is_enabled\": false
}"
const url = new URL(
    "https://fassiki.com/api/v1/analytics/websites/architecto"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Nouveau nom",
    "host": "newdomain.com",
    "tracking_type": "normal",
    "is_enabled": false
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Site mis à jour):


{
    "id": 1,
    "name": "Nouveau nom",
    "host": "newdomain.com",
    "is_enabled": true
}
 

Request      

PUT api/v1/analytics/websites/{id}

PATCH api/v1/analytics/websites/{id}

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the website. Example: architecto

website   integer     

Identifiant du site. Example: 1

Body Parameters

name   string  optional    

parfois Nom du site. Example: Nouveau nom

host   string  optional    

parfois Domaine/hôte. Example: newdomain.com

tracking_type   string  optional    

Example: normal

Must be one of:
  • normal
  • lightweight
is_enabled   boolean  optional    

parfois Activer/désactiver le suivi. Example: false

Supprimer un site analytics

requires authentication

Supprime définitivement un site analytics et toutes ses données associées.

Example request:
curl --request DELETE \
    "https://fassiki.com/api/v1/analytics/websites/architecto" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://fassiki.com/api/v1/analytics/websites/architecto"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (204, Site supprimé):

Empty response
 

Example response (404, Introuvable):


{
    "message": "Ressource introuvable."
}
 

Request      

DELETE api/v1/analytics/websites/{id}

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the website. Example: architecto

website   integer     

Identifiant du site. Example: 1

Audit

Lister les audits

requires authentication

Renvoie tous les audits de sites web de l'utilisateur, triés par date.

Example request:
curl --request GET \
    --get "https://fassiki.com/api/v1/audits" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://fassiki.com/api/v1/audits"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Liste):


{
    "data": [
        {
            "id": 1,
            "url": "https://example.com",
            "host": "example.com",
            "score": 78,
            "total_tests": 22,
            "passed_tests": 17
        }
    ]
}
 

Request      

GET api/v1/audits

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

Créer et lancer un audit

requires authentication

Crée un audit pour l'URL fournie et le lance immédiatement en arrière-plan (tests SEO, performance, sécurité, accessibilité). Si l'IA est activée, un résumé IA est également demandé. Le score et les détails sont remplis après exécution (récupérables via GET /audits/{id}). Le plan doit avoir le module Audit activé.

Example request:
curl --request POST \
    "https://fassiki.com/api/v1/audits" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"url\": \"https:\\/\\/example.com\",
    \"type\": \"single\"
}"
const url = new URL(
    "https://fassiki.com/api/v1/audits"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "url": "https:\/\/example.com",
    "type": "single"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201, Audit lancé):


{
    "audit": {
        "id": 1,
        "url": "https://example.com",
        "host": "example.com",
        "type": "single",
        "is_queued": true
    },
    "message": "Audit lancé en arrière-plan. Le score sera disponible sous peu."
}
 

Example response (402, Limite atteinte):


{
    "message": "Limite d'audits mensuels atteinte (100)."
}
 

Request      

POST api/v1/audits

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

url   string     

URL du site à auditer. Example: https://example.com

type   string  optional    

Mode : single, sitemap, bulk ou html. Example: single

Relancer un audit (refresh)

requires authentication

Relance un audit existant : l'ancien résultat est archivé, un nouveau score est calculé, et un résumé IA est régénéré si l'IA est activée.

Example request:
curl --request POST \
    "https://fassiki.com/api/v1/audits/1/run" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://fassiki.com/api/v1/audits/1/run"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200, Audit relancé):


{
    "message": "Audit relancé.",
    "audit_id": 1
}
 

Request      

POST api/v1/audits/{audit}/run

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

audit   integer     

Identifiant de l'audit. Example: 1

Compte

Profil & formule

requires authentication

Renvoie le profil de l'utilisateur authentifié ainsi que sa formule (plan) et les modules auxquels il a accès. Idéal pour vérifier qu'une clé API est valide.

Example request:
curl --request GET \
    --get "https://fassiki.com/api/v1/user" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://fassiki.com/api/v1/user"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Profil récupéré):


{
    "id": 1,
    "name": "Administrateur",
    "email": "admin@fassiki.com",
    "locale": "fr",
    "plan": {
        "name": "Business",
        "slug": "business",
        "modules": {
            "analytics": true,
            "pusher": true,
            "uptime": true,
            "audit": true
        }
    },
    "plan_expiration_date": null,
    "has_active_subscription": false
}
 

Request      

GET api/v1/user

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

Response

Response Fields

id   integer     

Identifiant de l'utilisateur.

name   string     

Nom complet.

email   string     

Adresse email.

plan   object     

Formule souscrite (name, slug, modules activés).

has_active_subscription   boolean     

Présence d'un abonnement payant actif.

Endpoints

GET api/v1/ping

requires authentication

Example request:
curl --request GET \
    --get "https://fassiki.com/api/v1/ping" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://fassiki.com/api/v1/ping"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "name": "Fassiki SaaS",
    "version": "v1",
    "time": "2026-07-30T10:33:09+00:00"
}
 

Request      

GET api/v1/ping

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

GET /api/v1/pusher/campaigns/{campaign}

requires authentication

Example request:
curl --request GET \
    --get "https://fassiki.com/api/v1/pusher/campaigns/architecto" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://fassiki.com/api/v1/pusher/campaigns/architecto"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 6000
x-ratelimit-remaining: 5999
access-control-allow-origin: *
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/pusher/campaigns/{id}

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the campaign. Example: architecto

PUT /api/v1/pusher/campaigns/{campaign}

requires authentication

Example request:
curl --request PUT \
    "https://fassiki.com/api/v1/pusher/campaigns/architecto" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"title\": \"n\",
    \"description\": \"Eius et animi quos velit et.\",
    \"url\": \"http:\\/\\/www.ernser.org\\/harum-mollitia-modi-deserunt-aut-ab-provident-perspiciatis-quo.html\",
    \"image\": \"http:\\/\\/swift.com\\/quidem-nostrum-qui-commodi-incidunt-iure-odit.html\",
    \"status\": \"sending\"
}"
const url = new URL(
    "https://fassiki.com/api/v1/pusher/campaigns/architecto"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "title": "n",
    "description": "Eius et animi quos velit et.",
    "url": "http:\/\/www.ernser.org\/harum-mollitia-modi-deserunt-aut-ab-provident-perspiciatis-quo.html",
    "image": "http:\/\/swift.com\/quidem-nostrum-qui-commodi-incidunt-iure-odit.html",
    "status": "sending"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/v1/pusher/campaigns/{id}

PATCH api/v1/pusher/campaigns/{id}

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the campaign. Example: architecto

Body Parameters

name   string  optional    

Must not be greater than 64 characters. Example: b

title   string  optional    

Must not be greater than 128 characters. Example: n

description   string  optional    

Example: Eius et animi quos velit et.

url   string  optional    

Must be a valid URL. Example: http://www.ernser.org/harum-mollitia-modi-deserunt-aut-ab-provident-perspiciatis-quo.html

image   string  optional    

Must be a valid URL. Example: http://swift.com/quidem-nostrum-qui-commodi-incidunt-iure-odit.html

status   string  optional    

Example: sending

Must be one of:
  • draft
  • scheduled
  • sending
  • sent
  • failed

DELETE /api/v1/pusher/campaigns/{campaign}

requires authentication

Example request:
curl --request DELETE \
    "https://fassiki.com/api/v1/pusher/campaigns/architecto" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://fassiki.com/api/v1/pusher/campaigns/architecto"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/pusher/campaigns/{id}

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the campaign. Example: architecto

GET /api/v1/uptime/monitors/{monitor}

requires authentication

Example request:
curl --request GET \
    --get "https://fassiki.com/api/v1/uptime/monitors/architecto" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://fassiki.com/api/v1/uptime/monitors/architecto"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 6000
x-ratelimit-remaining: 5999
access-control-allow-origin: *
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/uptime/monitors/{id}

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the monitor. Example: architecto

PUT /api/v1/uptime/monitors/{monitor}

requires authentication

Example request:
curl --request PUT \
    "https://fassiki.com/api/v1/uptime/monitors/architecto" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"type\": \"port\",
    \"target\": \"n\",
    \"port\": 16,
    \"is_enabled\": true
}"
const url = new URL(
    "https://fassiki.com/api/v1/uptime/monitors/architecto"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "type": "port",
    "target": "n",
    "port": 16,
    "is_enabled": true
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/v1/uptime/monitors/{id}

PATCH api/v1/uptime/monitors/{id}

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the monitor. Example: architecto

Body Parameters

name   string  optional    

Must not be greater than 64 characters. Example: b

type   string  optional    

Example: port

Must be one of:
  • website
  • port
  • ping
target   string  optional    

Must not be greater than 255 characters. Example: n

port   integer  optional    

Example: 16

is_enabled   boolean  optional    

Example: true

settings   object  optional    

DELETE /api/v1/uptime/monitors/{monitor}

requires authentication

Example request:
curl --request DELETE \
    "https://fassiki.com/api/v1/uptime/monitors/architecto" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://fassiki.com/api/v1/uptime/monitors/architecto"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/uptime/monitors/{id}

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the monitor. Example: architecto

GET /api/v1/audits/{audit}

requires authentication

Example request:
curl --request GET \
    --get "https://fassiki.com/api/v1/audits/architecto" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://fassiki.com/api/v1/audits/architecto"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 6000
x-ratelimit-remaining: 5999
access-control-allow-origin: *
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/audits/{id}

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the audit. Example: architecto

PUT /api/v1/audits/{audit}

requires authentication

Example request:
curl --request PUT \
    "https://fassiki.com/api/v1/audits/architecto" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"is_public\": false,
    \"password\": \"|]|{+-\",
    \"is_archived\": false
}"
const url = new URL(
    "https://fassiki.com/api/v1/audits/architecto"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "is_public": false,
    "password": "|]|{+-",
    "is_archived": false
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/v1/audits/{id}

PATCH api/v1/audits/{id}

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the audit. Example: architecto

Body Parameters

is_public   boolean  optional    

Example: false

password   string  optional    

Example: |]|{+-

is_archived   boolean  optional    

Example: false

DELETE /api/v1/audits/{audit}

requires authentication

Example request:
curl --request DELETE \
    "https://fassiki.com/api/v1/audits/architecto" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://fassiki.com/api/v1/audits/architecto"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/audits/{id}

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the audit. Example: architecto

Pusher

Lister les campagnes push

requires authentication

Renvoie toutes les campagnes de notifications push de l'utilisateur, triées par date.

Example request:
curl --request GET \
    --get "https://fassiki.com/api/v1/pusher/campaigns" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://fassiki.com/api/v1/pusher/campaigns"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Liste):


{
    "data": [
        {
            "id": 1,
            "name": "Promo été",
            "title": "-20% aujourd'hui",
            "status": "draft",
            "website": {
                "name": "Mon site",
                "host": "example.com"
            }
        }
    ]
}
 

Request      

GET api/v1/pusher/campaigns

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

Créer une campagne push

requires authentication

Crée une nouvelle campagne de notifications push (au statut draft). Elle pourra ensuite être planifiée/envoyée depuis l'interface ou via le cron pusher:process-scheduled.

Example request:
curl --request POST \
    "https://fassiki.com/api/v1/pusher/campaigns" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"website_id\": 1,
    \"name\": \"Promo été\",
    \"title\": \"-20% aujourd\'hui\",
    \"description\": \"Eius et animi quos velit et.\",
    \"url\": \"http:\\/\\/www.bailey.biz\\/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html\",
    \"image\": \"http:\\/\\/swift.com\\/quidem-nostrum-qui-commodi-incidunt-iure-odit.html\"
}"
const url = new URL(
    "https://fassiki.com/api/v1/pusher/campaigns"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "website_id": 1,
    "name": "Promo été",
    "title": "-20% aujourd'hui",
    "description": "Eius et animi quos velit et.",
    "url": "http:\/\/www.bailey.biz\/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html",
    "image": "http:\/\/swift.com\/quidem-nostrum-qui-commodi-incidunt-iure-odit.html"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201, Campagne créée):


{
    "id": 1,
    "name": "Promo été",
    "title": "-20% aujourd'hui",
    "status": "draft"
}
 

Example response (403, Module désactivé):


{
    "message": "Votre plan ne permet pas d'accéder à cette ressource."
}
 

Request      

POST api/v1/pusher/campaigns

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

website_id   integer     

Identifiant du site push. Example: 1

name   string     

Nom interne de la campagne. Example: Promo été

title   string     

Titre de la notification. Example: -20% aujourd'hui

description   string  optional    

Message de la notification. Example: Eius et animi quos velit et.

url   string  optional    

URL d'ouverture au clic. Example: http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html

image   string  optional    

Must be a valid URL. Example: http://swift.com/quidem-nostrum-qui-commodi-incidunt-iure-odit.html

Uptime

Lister les moniteurs

requires authentication

Renvoie tous les moniteurs (HTTP/HTTPS, port, ping) de l'utilisateur avec leurs statistiques d'uptime et de latence.

Example request:
curl --request GET \
    --get "https://fassiki.com/api/v1/uptime/monitors" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://fassiki.com/api/v1/uptime/monitors"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Liste):


{
    "data": [
        {
            "id": 1,
            "name": "Mon site",
            "type": "website",
            "target": "https://example.com",
            "is_ok": true,
            "uptime": 100,
            "average_response_time": 0.419999999999999984456877655247808434069156646728515625
        }
    ]
}
 

Request      

GET api/v1/uptime/monitors

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

Créer un moniteur

requires authentication

Crée un nouveau moniteur. Le prochain check est planifié automatiquement selon l'intervalle configuré (settings.interval, défaut 5 minutes). Le plan doit avoir le module Uptime activé et ne pas avoir atteint sa limite de moniteurs.

Example request:
curl --request POST \
    "https://fassiki.com/api/v1/uptime/monitors" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Mon site\",
    \"type\": \"website\",
    \"target\": \"https:\\/\\/example.com\",
    \"port\": 16,
    \"is_enabled\": false,
    \"settings\": []
}"
const url = new URL(
    "https://fassiki.com/api/v1/uptime/monitors"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Mon site",
    "type": "website",
    "target": "https:\/\/example.com",
    "port": 16,
    "is_enabled": false,
    "settings": []
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201, Moniteur créé):


{
    "id": 1,
    "name": "Mon site",
    "type": "website",
    "target": "https://example.com",
    "is_ok": true,
    "next_check_datetime": "2026-07-30T10:26:14.000000Z"
}
 

Example response (402, Limite atteinte):


{
    "message": "Limite de moniteurs atteinte pour votre plan (50)."
}
 

Request      

POST api/v1/uptime/monitors

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Nom du moniteur. Example: Mon site

type   string  optional    

Type : website, port ou ping. Example: website

target   string     

URL ou hôte à surveiller. Example: https://example.com

port   integer  optional    

Port (pour le type port). Example: 16

is_enabled   boolean  optional    

Example: false

settings   object  optional    

Réglages avancés (interval, timeout, expected_code, keyword).

Lancer une vérification immédiate

requires authentication

Déclenche un check manuel du moniteur (mis en file d'attente). Le résultat (uptime, latence, incident éventuel) sera mis à jour après exécution.

Example request:
curl --request POST \
    "https://fassiki.com/api/v1/uptime/monitors/1/check" \
    --header "Authorization: Bearer {VOTRE_CLE_API}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://fassiki.com/api/v1/uptime/monitors/1/check"
);

const headers = {
    "Authorization": "Bearer {VOTRE_CLE_API}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200, Check lancé):


{
    "message": "Vérification lancée.",
    "monitor_id": 1
}
 

Request      

POST api/v1/uptime/monitors/{monitor}/check

Headers

Authorization        

Example: Bearer {VOTRE_CLE_API}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

monitor   integer     

Identifiant du moniteur. Example: 1