En el servicio alojado, las organizaciones, los miembros, las claves de API, los créditos y las licencias de despliegue se gestionan a través de la API de organizaciones en https://ephemer.al/v1. El portal de clientes y el panel la usan por ti; esta página es para scripts e integraciones.
Autenticación
Estos endpoints actúan en nombre de una persona. Inicia sesión con POST /v1/auth/login y envía el token devuelto como token bearer. Las sesiones duran 30 días; POST /v1/auth/logout termina una antes de tiempo.
curl https://ephemer.al/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","password":"…"}'La respuesta es {"token": "...", "user": {...}, "organizations": [...]}. Cada organización tiene id, name y tu role. Todo lo que sigue, salvo listar y crear organizaciones y aceptar una invitación, requiere el rol de propietario o administrador en la organización indicada en la ruta.
Organizaciones
/v1/organizationsid, name y role./v1/organizations{"name": "..."} y te convierte en su propietario. Devuelve 201 con {"id": "org_...", "name": "...", "role": "owner"}./v1/organizations/{id}{"name": "..."}. El nombre se recorta y debe tener de 1 a 200 caracteres. Devuelve {"id": "org_...", "name": "...", "role": "owner"}. Los miembros reciben 403.Miembros
/v1/organizations/{id}/membersid, email, name, role y avatar_url./v1/organizations/{id}/members/{user_id}/v1/organizations/{id}/members/{user_id}{"role": "admin"} o {"role": "member"}./v1/organizations/{id}/ownership{"user_id": "..."}. Tú pasas a ser administrador.Invitaciones
/v1/organizations/{id}/invitations{"email": "...", "role": "member"}. role es admin o member. Devuelve 201 con token, url y email_delivery.email_delivery es accepted cuando el proveedor de correo aceptó el mensaje, lo que no garantiza que haya llegado a la bandeja de entrada. Si es unavailable o failed, comparte en privado la url devuelta. Las invitaciones caducan a los 7 días. La persona invitada la acepta con POST /v1/invitations/accept y {"token": "..."}, con la sesión iniciada con la dirección de correo invitada.
Claves de API
/v1/organizations/{id}/keysid, name, role y created_at. Los secretos nunca se listan./v1/organizations/{id}/keys{"name": "...", "role": "member"}. role es member o admin y por defecto es member.{
"id": "key_0b7e4c2a9d1f8356e4a2c7b9d0f1e3a5",
"name": "production-server",
"role": "member",
"key": "eak_…"
}key se devuelve una sola vez. Guárdalo antes de cerrar la respuesta./v1/organizations/{id}/keys/{key_id}Perfil
Estos requieren una sesión de usuario iniciada; las claves de API se rechazan. Los usuarios, y cada entrada de miembros, incluyen avatar_url: una ruta como /v1/users/usr_…/avatar?v=3f2a…, o null.
/v1/me/avatarContent-Type image/png, image/jpeg o image/webp, de hasta 256 KiB. Devuelve el mismo cuerpo que GET /v1/auth/me. Como máximo 20 subidas por hora./v1/me/avatar/v1/me/password{"current_password": "...", "new_password": "..."}. La contraseña nueva tiene de 12 a 72 bytes. Se cierran tus otras sesiones; la que hace la solicitud permanece abierta. Como máximo 10 intentos por hora./v1/users/{user_id}/avatar404. La URL cambia cuando cambia la imagen, así que se puede guardar en caché de forma indefinida.Facturación
El dinero en estos endpoints usa centavos para los importes de Stripe y micros para los importes del monedero. Consulta presupuestos y facturación.
/v1/organizations/{id}/balance{"balance_micros": ..., "reserved_micros": ..., "available_micros": ...}: créditos disponibles en total, reservados para ejecuciones sin liquidar y disponibles para nuevas ejecuciones. Comprueba available_micros frente al presupuesto de una ejecución antes de iniciarla./v1/organizations/{id}/billingbalance_micros, reserved_micros, available_microsintegerledgerarrayamount_micros, description, created_at y, cuando corresponden, run_id, payment_id y topup_id.purchase_limitsobjectmin_amount_cents, max_amount_cents y min_threshold_cents. Valida con estos valores en lugar de fijar los límites en el código.auto_topupobjectenabled, threshold_cents, amount_cents, payment_method_saved y last_topup_status.payment_methodobject | nullbrand, last4, exp_month, exp_year y source.payment_method_syncstringsynced, o unavailable cuando no se pudo contactar con Stripe. Que la consulta falle no significa que no haya tarjeta.stripe_configuredboolean/v1/organizations/{id}/billing/checkout{"amount_cents": 2500} y devuelve {"url": "..."} para Stripe Checkout. Añade "save_payment_method": true para guardar la tarjeta para recargas automáticas. Los importes van de 500 a 1000000 centavos./v1/organizations/{id}/billing/portal{"url": "..."} del portal de clientes de Stripe, donde se gestionan las tarjetas./v1/organizations/{id}/billing/auto-topup{"enabled": true, "threshold_cents": 1000, "amount_cents": 5000, "consent": true}, o la desactiva con {"enabled": false}. Activarla requiere una tarjeta guardada./v1/organizations/{id}/billing/paymentslimit (de 1 a 100, por defecto 25) y cursor, y devuelve {"payments": [...], "next_cursor": "..."}. Cada pago tiene amount_cents, refunded_cents, disputed_cents, refund_status, created_at, topup_id y receipt_endpoint./v1/organizations/{id}/billing/payments/{payment_id}/receipt{"url": "..."} del recibo de Stripe, o 404 si Stripe no ha proporcionado ninguno.Licencias de despliegue
/v1/organizations/{id}/license{"entitlement": null}./v1/organizations/{id}/deployments/v1/organizations/{id}/deployments{"name": "..."} y devuelve su token de licencia una sola vez, con el ID de máquina que generó Ephemeral (o el machine_id que envíes)./v1/organizations/{id}/deployments/{deployment_id}