Sur le service hébergé, les organisations, les membres, les clés API, les crédits et les licences de déploiement se gèrent via l'API d'organisation, à l'adresse https://ephemer.al/v1. Le portail client et le tableau de bord l'utilisent pour vous ; cette page s'adresse aux scripts et aux intégrations.
Authentification
Ces endpoints agissent au nom d'une personne. Connectez-vous avec POST /v1/auth/login et envoyez le token renvoyé comme jeton bearer. Les sessions durent 30 jours ; POST /v1/auth/logout en termine une plus tôt.
curl https://ephemer.al/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","password":"…"}'La réponse est {"token": "...", "user": {...}, "organizations": [...]}. Chaque organisation a un id, un name et votre role. Tout ce qui suit, à l'exception du listage et de la création d'organisations et de l'acceptation d'une invitation, exige le rôle de propriétaire ou d'administrateur dans l'organisation indiquée dans le chemin.
Organisations
/v1/organizationsid, name et role./v1/organizations{"name": "..."} et vous en fait propriétaire. Renvoie 201 avec {"id": "org_...", "name": "...", "role": "owner"}./v1/organizations/{id}{"name": "..."}. Le nom est rogné et doit compter de 1 à 200 caractères. Renvoie {"id": "org_...", "name": "...", "role": "owner"}. Les membres reçoivent 403.Membres
/v1/organizations/{id}/membersid, email, name, role et avatar_url./v1/organizations/{id}/members/{user_id}/v1/organizations/{id}/members/{user_id}{"role": "admin"} ou {"role": "member"}./v1/organizations/{id}/ownership{"user_id": "..."}. Vous devenez administrateur.Invitations
/v1/organizations/{id}/invitations{"email": "...", "role": "member"}. role vaut admin ou member. Renvoie 201 avec token, url et email_delivery.email_delivery vaut accepted lorsque le fournisseur d'e-mail a pris le message en charge, ce qui ne garantit pas qu'il soit arrivé dans la boîte de réception. S'il vaut unavailable ou failed, transmettez l'url renvoyée en privé. Les invitations expirent au bout de 7 jours. La personne invitée l'accepte avec POST /v1/invitations/accept et {"token": "..."}, connectée avec l'adresse e-mail invitée.
Clés API
/v1/organizations/{id}/keysid, name, role et created_at. Les secrets ne sont jamais listés./v1/organizations/{id}/keys{"name": "...", "role": "member"}. role vaut member ou admin et member par défaut.{
"id": "key_0b7e4c2a9d1f8356e4a2c7b9d0f1e3a5",
"name": "production-server",
"role": "member",
"key": "eak_…"
}key n'est renvoyée qu'une seule fois. Conservez-la avant de fermer la réponse./v1/organizations/{id}/keys/{key_id}Profil
Ces endpoints exigent une session utilisateur connectée ; les clés API sont refusées. Les utilisateurs, ainsi que chaque entrée de membres, portent avatar_url : un chemin tel que /v1/users/usr_…/avatar?v=3f2a…, ou null.
/v1/me/avatarContent-Type image/png, image/jpeg ou image/webp, 256 Kio au maximum. Renvoie le même corps que GET /v1/auth/me. 20 imports par heure au maximum./v1/me/avatar/v1/me/password{"current_password": "...", "new_password": "..."}. Le nouveau mot de passe fait de 12 à 72 octets. Vos autres sessions sont déconnectées ; celle qui fait la requête reste connectée. 10 tentatives par heure au maximum./v1/users/{user_id}/avatar404. L'URL change lorsque l'image change : elle peut donc être mise en cache indéfiniment.Facturation
Dans ces endpoints, les montants Stripe sont en cents et les montants du portefeuille en micros. Voir budgets et facturation.
/v1/organizations/{id}/balance{"balance_micros": ..., "reserved_micros": ..., "available_micros": ...} : crédits détenus, réservés pour des exécutions non réglées, et disponibles pour de nouvelles exécutions. Comparez available_micros au budget d'une exécution avant de la lancer./v1/organizations/{id}/billingbalance_micros, reserved_micros, available_microsintegerledgerarrayamount_micros, description, created_at et, le cas échéant, run_id, payment_id et topup_id.purchase_limitsobjectmin_amount_cents, max_amount_cents et min_threshold_cents. Validez à partir de ces valeurs plutôt que de coder les limites en dur.auto_topupobjectenabled, threshold_cents, amount_cents, payment_method_saved et last_topup_status.payment_methodobject | nullbrand, last4, exp_month, exp_year et source.payment_method_syncstringsynced, ou unavailable lorsque Stripe n'a pas pu être joint. Un échec de consultation ne signifie pas qu'il n'y a pas de carte.stripe_configuredboolean/v1/organizations/{id}/billing/checkout{"amount_cents": 2500} et renvoie {"url": "..."} pour Stripe Checkout. Ajoutez "save_payment_method": true pour enregistrer la carte en vue des recharges automatiques. Les montants vont de 500 à 1 000 000 cents./v1/organizations/{id}/billing/portal{"url": "..."} pour le portail client Stripe, où les cartes se gèrent./v1/organizations/{id}/billing/auto-topup{"enabled": true, "threshold_cents": 1000, "amount_cents": 5000, "consent": true}, ou la désactive avec {"enabled": false}. L'activation exige une carte enregistrée./v1/organizations/{id}/billing/paymentslimit (de 1 à 100, 25 par défaut) et cursor, et renvoie {"payments": [...], "next_cursor": "..."}. Chaque paiement a amount_cents, refunded_cents, disputed_cents, refund_status, created_at, topup_id et receipt_endpoint./v1/organizations/{id}/billing/payments/{payment_id}/receipt{"url": "..."} pour le reçu Stripe, ou 404 si Stripe n'en a pas fourni.Licences de déploiement
/v1/organizations/{id}/license{"entitlement": null}./v1/organizations/{id}/deployments/v1/organizations/{id}/deployments{"name": "..."} et renvoie son jeton de licence une seule fois, avec l'ID de machine généré par Ephemeral (ou le machine_id que vous envoyez)./v1/organizations/{id}/deployments/{deployment_id}