Intégration
Recettes for_each, smoke CI, vérif webhook, RGPD et règle UI ou Terraform.
Contrat OpenAPIÉmettre une clé d’APICompte Solo gratuit
Obtenir ma clé API (inscription gratuite)
Document complet, sans authentification, à donner à votre générateur de client.
Mesure depuis l’UE. Données hébergées dans l’Union. Minimisez les PII dans les noms de scénarios et les payloads custom. Les exports d’organisation (membres) restent hors API clé — volontairement.
Rotation : TTL court sur les clés CI, révocation immédiate si fuite. Logs applicatifs : ne jamais journaliser Authorization ni le corps signé brut si le secret y figure.
Le drift apparaît quand la console et l’état Terraform divergent. Choisissez une source de vérité par environnement. Import natif du provider pour adopter un parc déjà créé à la main, puis interdire les edits console sur ces ressources.
# Adopter un scénario existant
terraform import pathly_scenario.home scn_…Recettes prêtes à coller. Adaptez les noms et les URLs (domaines example.* uniquement dans la doc).
Flotte agence — for_each
locals {
clients = {
acme = "https://www.example.com/"
globex = "https://shop.example.com/"
}
}
resource "pathly_scenario" "home" {
for_each = local.clients
name = "home-${each.key}"
url = each.value
interval_sec = 300
severity = "critical"
}GitHub Actions — run-scenario post-deploy
- name: Pathly smoke
uses: pathlyhq/pathly-action@v1
with:
api_token: ${{ secrets.PATHLY_API_TOKEN }}
operation: run-scenario
scenario_id: ${{ vars.PATHLY_CHECKOUT_SCENARIO_ID }}
timeout_sec: "120"GitLab CI — component
include:
- component: gitlab.com/pathly1/provider/gitlab-ci/pathly-ping@0.1.2
inputs:
api_token: $PATHLY_API_TOKENNode SDK — Ping, Chain, lister
import { PathlyClient } from "@pathly/sdk";
const client = new PathlyClient({ token: process.env.PATHLY_API_TOKEN });
const s = await client.createScenario({
name: "Checkout",
url: "https://www.example.com/cart",
intervalSec: 300,
expectText: "Your cart",
});
const chain = await client.createChain({
name: "Login then /me",
intervalSec: 300,
hops: [
{ method: "POST", url: "https://api.example.com/login", assertStatus: 200 },
{ method: "GET", url: "https://api.example.com/me", assertStatus: 200 },
],
});
for await (const row of client.paginate((cursor) => client.listScenarios({ cursor }))) {
console.log(row.id, row.name);
}Python SDK
from pathly import Client, ScenarioInput
client = Client()
s = client.create_scenario(ScenarioInput(
name="Checkout",
url="https://www.example.com/cart",
intervalSec=300,
expectText="Your cart",
))
chain = client.create_scenario(ScenarioInput(
name="Login then /me",
intervalSec=300,
httpChain=[
{"method": "POST", "url": "https://api.example.com/login", "assertStatus": 200},
{"method": "GET", "url": "https://api.example.com/me", "assertStatus": 200},
],
))
print(s.id, chain.id)jq — filtrer les scénarios critiques
curl -sS https://api.pathlyhq.com/v1/scenarios \
-H "Authorization: Bearer $PATHLY_API_TOKEN" \
| jq '.items[] | select(.severity=="critical") | {id,name,url}'