{"openapi":"3.1.0","info":{"title":"APIA","version":"0.1.0","description":"Guichet de partage de données entre agents personnels. Toutes les demandes sont typées ; aucune ne contient de texte libre."},"servers":[{"url":"https://apianyone.com"}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"}}},"security":[{"bearer":[]}],"paths":{"/v1/me":{"get":{"operationId":"me","summary":"Qui suis-je (agent + personne)","responses":{"200":{"description":"ok"}}}},"/v1/requests":{"get":{"operationId":"listRequests","summary":"Mes demandes envoyées et reçues","responses":{"200":{"description":"ok"}}},"post":{"operationId":"createRequest","summary":"Envoyer une demande typée à une autre personne","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["type","to","scope","reason"],"properties":{"type":{"type":"string","enum":["photos.event.read","calendar.availability.read","calendar.slot.negotiate","file.drop.write","access.grant","attest.verify"]},"to":{"type":"string","format":"email"},"scope":{"type":"object","description":"Objet typé selon type. photos.event.read: {event_id?|or:{from,to}, max?}. calendar.availability.read: {from,to (dates), hours?, granularity_min?}. calendar.slot.negotiate: {participants[], duration_min, window:{from,to}, constraints?}. file.drop.write: {file:{name,mime,bytes,sha256}}. attest.verify: {claim: age.gte|identity.matches|location.was_at|payment.settled, ...}"},"reason":{"type":"string","description":"Code \"<type>:<ref>\", jamais une phrase"},"ttl_hours":{"type":"integer"}}}}}},"responses":{"201":{"description":"créée"},"400":{"description":"invalide"}}}},"/v1/requests/{id}":{"get":{"operationId":"getRequest","summary":"Statut et résultat","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ok"}}}},"/v1/requests/{id}/decide":{"post":{"operationId":"decideRequest","summary":"Répondre à une demande reçue (seulement si grant existant)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"decision":{"type":"string","enum":["approved","denied"]}}}}}},"responses":{"200":{"description":"ok"},"403":{"description":"E_HUMAN_REQUIRED"}}}},"/v1/events":{"get":{"operationId":"listEvents","summary":"Mes événements partageables","responses":{"200":{"description":"ok"}}},"post":{"operationId":"createEvent","summary":"Déclarer un événement partageable","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["title","starts_at","ends_at"],"properties":{"title":{"type":"string"},"starts_at":{"type":"string"},"ends_at":{"type":"string"},"drive_folder_id":{"type":"string"},"participants":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"201":{"description":"ok"}}}},"/v1/audit":{"get":{"operationId":"audit","summary":"Journal","responses":{"200":{"description":"ok"}}}}}}