{"openapi":"3.0.0","info":{"title":"Openapi OAuth Service","version":"2.1.0","description":"API de gestion OAuth complète qui permet aux développeurs de créer, gérer et surveiller les jetons OAuth avec des autorisations granulaires basées sur le champ d'application. Les fonctionnalités comprennent la gestion du cycle de vie des jetons, le suivi des statistiques d'utilisation, la facturation basée sur le wallet, la gestion des abonnements, la surveillance des rappels et des analyses détaillées sur plusieurs domaines d'API.","contact":{"url":"https://openapi.it/en/support","name":"Support"},"termsOfService":"https://openapi.it/en/terms-and-conditions"},"servers":[{"url":"https://oauth.openapi.com","description":"Production"},{"url":"https://test.oauth.openapi.com","description":"Sandbox"}],"tags":[{"name":"Tokens","description":"Opérations liées aux jetons OAuth"},{"name":"Scopes","description":"Opérations liées aux champs d'application d'OAuth"},{"name":"Callbacks","description":"Opérations liées aux rappels OAuth"},{"name":"Errors","description":"Opérations liées aux erreurs de l'API"},{"name":"Wallet","description":"Opérations liées au wallet associé aux tokens"},{"name":"Stats","description":"Opérations liées aux statistiques d'utilisation de l'API"},{"name":"Subscriptions","description":"Opérations liées aux abonnements"}],"paths":{"/tokens":{"post":{"summary":"Créer un nouveau jeton","tags":["Tokens"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenCreate"}}}},"responses":{"200":{"description":"Jeton créé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenDetail"}}}},"422":{"description":"Erreur de validation","content":{"application/json":{"examples":{"missing_scopes":{"summary":"tableau des champs d'application manquants","value":{"success":false,"message":"missing scopes array","error":70,"data":null}},"invalid_scopes_format":{"summary":"format des champs d'application non valide","value":{"success":false,"message":"invalid scopes format","error":80,"data":null}},"invalid_scopes":{"summary":"Champs d'application non valides ou API non activée","value":{"success":false,"message":"Invalid scopes specified or API not enabled","error":90,"data":null}}}}}}},"security":[{"Basic-Authentication":[]}]},"get":{"summary":"Détail de la liste ou du jeton","tags":["Tokens"],"parameters":[{"name":"limit","in":"query","description":"Nombre maximum de jetons à renvoyer (par défaut 100, max 100)","required":false,"schema":{"type":"integer","default":100,"maximum":100}},{"name":"skip","in":"query","description":"Nombre de tokens à ignorer pour la pagination (par défaut 0)","required":false,"schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Détail de la liste ou du jeton","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenListOrDetail"}}}},"404":{"description":"Jeton non trouvé","content":{"application/json":{"example":{"success":false,"message":"Not Found","error":120,"data":null}}}},"422":{"description":"Erreur de validation","content":{"application/json":{"example":{"success":false,"message":"Invalid Token Format","error":60,"data":null}}}}},"security":[{"Basic-Authentication":[]}]}},"/scopes":{"get":{"summary":"Liste des portées disponibles","tags":["Scopes"],"responses":{"200":{"description":"Liste des champs d'application","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/UserScope"}}}}}}}},"security":[{"Basic-Authentication":[]}]}},"/tokens/{token}":{"get":{"summary":"Obtenir un jeton par ID","tags":["Tokens"],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"},"description":"Identifiant du jeton"}],"responses":{"200":{"description":"Détail du jeton","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenDetail"}}}},"404":{"description":"Jeton non trouvé","content":{"application/json":{"example":{"success":false,"message":"Not Found","error":120,"data":null}}}},"422":{"description":"Erreur de validation","content":{"application/json":{"example":{"success":false,"message":"Invalid Token Format","error":60,"data":null}}}}},"security":[{"Basic-Authentication":[]}]},"patch":{"summary":"Mise à jour du jeton par ID","tags":["Tokens"],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"},"description":"Identifiant du jeton"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenUpdate"}}}},"responses":{"200":{"description":"Mise à jour du jeton","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenDetail"}}}},"400":{"description":"Bad Request","content":{"application/json":{"examples":{"token_id_required":{"summary":"L'identifiant du jeton est requis","value":{"success":false,"message":"Token ID is required","error":150,"data":null}}}}}},"401":{"description":"Non autorisé","content":{"application/json":{"examples":{"unauthorized_refresh":{"summary":"Non autorisé","value":{"success":false,"message":"Unauthorized","error":130,"data":null}},"unauthorized_authdata":{"summary":"Non autorisé","value":{"success":false,"message":"Unauthorized","error":140,"data":null}}}}}},"404":{"description":"Jeton non trouvé","content":{"application/json":{"example":{"success":false,"message":"Not Found","error":160,"data":null}}}},"422":{"description":"Erreur de validation","content":{"application/json":{"examples":{"invalid_scopes_format":{"summary":"format des champs d'application non valide","value":{"success":false,"message":"invalid scopes format","error":100,"data":null}},"invalid_scopes":{"summary":"Champs d'application non valides ou API non activée","value":{"success":false,"message":"Invalid scopes specified or API not enabled","error":110,"data":null}}}}}}},"security":[{"Basic-Authentication":[]},{"Refresh-Authentication":[]}]},"delete":{"summary":"Supprimer le jeton par ID","tags":["Tokens"],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"},"description":"Identifiant du jeton"}],"responses":{"200":{"description":"Token supprimé avec succès","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Deleted"},"data":{"nullable":true}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"example":{"success":false,"message":"Token ID is required","error":170,"data":null}}}},"404":{"description":"Jeton non trouvé","content":{"application/json":{"example":{"success":false,"message":"Not Found","error":180,"data":null}}}}},"security":[{"Basic-Authentication":[]}]}},"/errors":{"get":{"summary":"Liste des journaux d'erreurs","tags":["Errors"],"parameters":[{"name":"scopes","in":"query","required":false,"schema":{"type":"string"},"description":"Liste séparée par des virgules des champs d'application pour filtrer les erreurs"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0},"description":"Nombre d'erreurs à ignorer pour la pagination"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"maximum":100},"description":"Nombre maximum d'erreurs à renvoyer"}],"responses":{"200":{"description":"Liste des journaux d'erreurs","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ErrorLog"}}}},"example":{"data":[{"id":"69822d1d48be79971b04351a","scope":"DELETE:oauth.openapi.com/tokens","domain":"oauth.openapi.com","errorAt":"2026-02-03T17:15:09+00:00","httpResponseCode":404,"errorCode":180,"message":"Not Found","ip":"93.146.69.125"},{"id":"69822d1d48be79971b04351b","scope":"GET:company.openapi.com/resource","domain":"company.openapi.com","errorAt":"2026-02-03T16:30:45+00:00","httpResponseCode":400,"errorCode":190,"message":"Query error","ip":"192.168.1.100"}]}}}},"400":{"description":"Erreur d'interrogation","content":{"application/json":{"example":{"success":false,"message":"Query error","error":190,"data":null}}}}},"security":[{"Basic-Authentication":[]}]}},"/wallet":{"get":{"summary":"Obtenir des informations sur le wallet","tags":["Wallet"],"responses":{"200":{"description":"Informations sur le wallet","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Wallet"}}},"example":{"data":{"credit":125.5,"createdAt":"2025-01-15T10:00:00+00:00","updatedAt":"2026-02-12T08:30:00+00:00"}}}}}},"security":[{"Basic-Authentication":[]}]}},"/callbacks":{"get":{"summary":"Liste des callbacks ou obtention d'un callback par ID","tags":["Callbacks"],"parameters":[{"name":"scopes","in":"query","required":false,"schema":{"type":"string"},"description":"Liste de champs d'application séparés par des virgules pour filtrer les rappels"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0},"description":"Nombre de rappels à ignorer pour la pagination"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"maximum":100},"description":"Nombre maximal de rappels à renvoyer"}],"responses":{"200":{"description":"Informations sur le(s) rappel(s)","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"oneOf":[{"type":"array","items":{"$ref":"#/components/schemas/CallbackListElement"}},{"$ref":"#/components/schemas/Callback"}]}}},"examples":{"list":{"summary":"Liste des rappels","value":{"data":[{"id":"65a1b2c3d4e5f6789abcdef0","scope":"POST:company.openapi.com/webhook","url":"https://example.com/callback","httpResponseCode":"200","startedAt":"2026-02-12T10:00:00+00:00","completedAt":"2026-02-12T10:00:05+00:00"},{"id":"65a1b2c3d4e5f6789abcdef1","scope":"POST:sms.openapi.com/send","url":"https://app.example.com/notify","httpResponseCode":"200","startedAt":"2026-02-12T09:30:00+00:00","completedAt":null}]}},"detail":{"summary":"Détail du rappel unique","value":{"data":{"id":"65a1b2c3d4e5f6789abcdef0","scope":"POST:company.openapi.com/webhook","domain":"company.openapi.com","active":false,"startedAt":"2026-02-12T10:00:00+00:00","createdAt":"2026-02-12T09:59:55+00:00","completedAt":"2026-02-12T10:00:05+00:00","httpResponseCode":200,"data":{"event":"user.created","userId":"12345"},"custom":{"trackingId":"abc-123"},"headers":{"Content-Type":"application/json","X-Webhook-Signature":"sha256=..."},"elapsedTime":5234,"attempt":1,"retry":0,"field":"webhookUrl","method":"POST","url":"https://example.com/callback"}}}}}}},"400":{"description":"Erreur d'interrogation","content":{"application/json":{"example":{"success":false,"message":"Query error","error":210,"data":null}}}},"404":{"description":"Callback introuvable","content":{"application/json":{"example":{"success":false,"message":"Callback not found","error":200,"data":null}}}}},"security":[{"Basic-Authentication":[]}]}},"/stats":{"get":{"summary":"Obtenir des statistiques globales sur l'utilisation de l'API","tags":["Stats"],"parameters":[{"name":"date","in":"query","required":false,"schema":{"type":"string","format":"date"},"description":"Filtre de date"}],"responses":{"200":{"description":"Informations sur les statistiques générales","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"totalRequests":{"type":"number","description":"Nombre total de demandes"},"walletRequests":{"type":"number","description":"Nombre de demandes de portefeuilles payants"},"subscriptionRequests":{"type":"number","description":"Nombre de demandes d'abonnement"},"errorRequests":{"type":"number","description":"Nombre de demandes d'erreur"},"walletAmount":{"type":"number","description":"Montant total dépensé via le wallet"},"totalIps":{"type":"integer","description":"Nombre total d'adresses IP uniques"},"totalApis":{"type":"integer","description":"Nombre total d'API utilisées"}}}}},"example":{"data":{"totalRequests":1500,"walletRequests":800,"subscriptionRequests":700,"errorRequests":12,"walletAmount":125.5,"totalIps":45,"totalApis":8}}}}},"422":{"description":"Format de date non valide","content":{"application/json":{"example":{"success":false,"message":"Invalid date format, must be YYYY or YYYY-MM or YYYY-MM-DD","error":240,"data":null}}}}},"security":[{"Basic-Authentication":[]}]}},"/stats/ips":{"get":{"summary":"Obtenir la liste des adresses IP uniques","tags":["Stats"],"parameters":[{"name":"date","in":"query","required":false,"schema":{"type":"string"},"description":"Filtre de date (YYYY ou YYYY-MM ou YYYY-MM-DD)"}],"responses":{"200":{"description":"Tableau d'adresses IP uniques","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"string"}}}},"example":{"data":["192.168.1.1","10.0.0.5","172.16.0.100","203.0.113.42"]}}}},"422":{"description":"Format de date non valide","content":{"application/json":{"example":{"success":false,"message":"Invalid date format, must be YYYY or YYYY-MM or YYYY-MM-DD","error":240,"data":null}}}}},"security":[{"Basic-Authentication":[]}]}},"/stats/apis":{"get":{"summary":"Obtenir des statistiques groupées par domaine d'API","tags":["Stats"],"parameters":[{"name":"date","in":"query","required":false,"schema":{"type":"string"},"description":"Filtre de date (YYYY ou YYYY-MM ou YYYY-MM-DD)"}],"responses":{"200":{"description":"Statistiques regroupées par domaine API","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Objet dont chaque clé est un domaine de l'API et dont la valeur contient des statistiques pour ce domaine","additionalProperties":{"type":"object","properties":{"totalRequests":{"type":"number","description":"Nombre total de demandes pour ce domaine"},"walletRequests":{"type":"number","description":"Nombre de demandes de wallet payées pour ce domaine"},"subscriptionRequests":{"type":"number","description":"Nombre de demandes d'abonnement pour ce domaine"},"errorRequests":{"type":"number","description":"Nombre de demandes d'erreur pour ce domaine"},"walletAmount":{"type":"number","description":"Montant total dépensé via le wallet pour ce domaine"},"totalIps":{"type":"integer","description":"Nombre d'adresses IP uniques pour ce domaine"},"totalScopes":{"type":"integer","description":"Nombre de scopes pour ce domaine"}}}}}},"example":{"data":{"company.openapi.com":{"totalRequests":500,"walletRequests":300,"subscriptionRequests":200,"errorRequests":5,"walletAmount":45.5,"totalIps":20,"totalScopes":15},"sms.openapi.com":{"totalRequests":1000,"walletRequests":500,"subscriptionRequests":500,"errorRequests":7,"walletAmount":80,"totalIps":25,"totalScopes":20}}}}}},"422":{"description":"Format de date non valide","content":{"application/json":{"example":{"success":false,"message":"Invalid date format, must be YYYY or YYYY-MM or YYYY-MM-DD","error":240,"data":null}}}}},"security":[{"Basic-Authentication":[]}]}},"/stats/apis/{domain}":{"get":{"summary":"Obtenir des statistiques détaillées pour un domaine d'API spécifique, y compris la répartition des champs d'application","tags":["Stats"],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Nom de domaine de l'API","example":"company.openapi.com"},{"name":"date","in":"query","required":false,"schema":{"type":"string"},"description":"Filtre de date (YYYY ou YYYY-MM ou YYYY-MM-DD)"}],"responses":{"200":{"description":"Statistiques spécifiques au domaine avec ventilation des champs d'application","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"totalRequests":{"type":"number","description":"Nombre total de demandes pour ce domaine"},"walletRequests":{"type":"number","description":"Nombre de demandes de wallet payées pour ce domaine"},"subscriptionRequests":{"type":"number","description":"Nombre de demandes d'abonnement pour ce domaine"},"errorRequests":{"type":"number","description":"Nombre de demandes d'erreur pour ce domaine"},"walletAmount":{"type":"number","description":"Montant total dépensé via le wallet pour ce domaine"},"ip":{"type":"array","description":"Tableau d'adresses IP uniques pour ce domaine","items":{"type":"string"}},"totalIps":{"type":"integer","description":"Nombre d'adresses IP uniques pour ce domaine"},"totalScopes":{"type":"integer","description":"Nombre de scopes pour ce domaine"},"scopes":{"type":"object","description":"Objet dont chaque clé est un identifiant de champ d'application et dont la valeur contient des statistiques pour ce champ d'application","additionalProperties":{"type":"object","properties":{"totalRequests":{"type":"number"},"walletRequests":{"type":"number"},"subscriptionRequests":{"type":"number"},"errorRequests":{"type":"number"},"walletAmount":{"type":"number"},"ip":{"type":"array","items":{"type":"string"}}}}}}}}},"example":{"data":{"totalRequests":500,"walletRequests":300,"subscriptionRequests":200,"errorRequests":5,"walletAmount":45.5,"ip":["192.168.1.1","10.0.0.5"],"totalIps":2,"totalScopes":15,"scopes":{"POST:company.openapi.com/endpoint":{"totalRequests":250,"walletRequests":150,"subscriptionRequests":100,"errorRequests":2,"walletAmount":22.75,"ip":["192.168.1.1"]},"GET:company.openapi.com/endpoint":{"totalRequests":250,"walletRequests":150,"subscriptionRequests":100,"errorRequests":3,"walletAmount":22.75,"ip":["10.0.0.5"]}}}}}}},"422":{"description":"Format de date non valide","content":{"application/json":{"example":{"success":false,"message":"Invalid date format, must be YYYY or YYYY-MM or YYYY-MM-DD","error":240,"data":null}}}}},"security":[{"Basic-Authentication":[]}]}},"/subscriptions":{"get":{"summary":"Liste des abonnements ou obtention d'un abonnement par ID","tags":["Subscriptions"],"parameters":[{"name":"id","in":"query","required":false,"schema":{"type":"string"},"description":"ID de l'abonnement pour récupérer un abonnement spécifique"},{"name":"scopes","in":"query","required":false,"schema":{"type":"string"},"description":"Liste de champs d'application séparés par des virgules pour filtrer les abonnements"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0},"description":"Nombre d'abonnements à ignorer pour la pagination"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"maximum":100},"description":"Nombre maximum d'abonnements à renvoyer"}],"responses":{"200":{"description":"Abonnement(s) info","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"oneOf":[{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionListElement"}},{"$ref":"#/components/schemas/Subscription"}]}}},"examples":{"list":{"summary":"Liste des abonnements","value":{"data":[{"id":"656d1e2f8b3c2a001f7e4a20","scope":"GET:company.openapi.com/resource","active":true,"availableRequests":"950","startsAt":"2025-11-01T00:00:00+00:00","expiresAt":"2025-12-01T00:00:00+00:00"},{"id":"656d1e2f8b3c2a001f7e4a21","scope":"POST:sms.openapi.com/send","active":true,"availableRequests":"800","startsAt":"2025-11-15T00:00:00+00:00","expiresAt":"2026-11-15T00:00:00+00:00"}]}},"detail":{"summary":"Détail de l'abonnement unique","value":{"data":{"id":"656d1e2f8b3c2a001f7e4a20","scope":"GET:company.openapi.com/resource","domain":"company.openapi.com","active":true,"startsAt":"2025-11-01T00:00:00+00:00","expiresAt":"2025-12-01T00:00:00+00:00","totalRequests":"1000","availableRequests":"950","pricePerRequest":0.01,"type":"monthly","autorenew":true,"createdAt":"2025-10-25T10:00:00+00:00","updatedAt":"2025-11-19T15:30:00+00:00","price":10}}}}}}},"400":{"description":"Erreur d'interrogation","content":{"application/json":{"example":{"success":false,"message":"Query error","error":230,"data":null}}}},"404":{"description":"Abonnement non trouvé","content":{"application/json":{"example":{"success":false,"message":"Subscription not found","error":220,"data":null}}}}},"security":[{"Basic-Authentication":[]}]}},"/scopes/{id}":{"get":{"summary":"Obtenir le champ d'application par ID","tags":["Scopes"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Identification du champ d'application"}],"responses":{"200":{"description":"Détail du champ d'application","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ScopeDetail"},"success":{"type":"boolean","example":true},"message":{"type":"string","example":""},"error":{"nullable":true,"example":null}},"required":["data","success","message","error"]},"example":{"data":{"id":"682c9f5a51671f7ef264c4fd","scope":"GET:company.openapi.com/CH-start","method":"GET","endpoint":"CH-start","domain":"company.openapi.com","enabled":false,"rateLimit":false,"freeLimits":{"dayLimit":0,"monthLimit":false,"yearLimit":false,"totalLimit":false},"requirements":{"id_card":false,"oa_general_contract":false},"prices":{"ch-start":0.06}},"success":true,"message":"","error":null}}}},"404":{"description":"Champ d'application non trouvé","content":{"application/json":{"example":{"success":false,"message":"Scope not found","error":10,"data":null}}}}},"security":[{"Basic-Authentication":[]}]}},"/callbacks/{id}":{"get":{"summary":"Obtenir un rappel par ID","tags":["Callbacks"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID de rappel"}],"responses":{"200":{"description":"Détail du rappel","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Callback"}}},"example":{"data":{"id":"65a1b2c3d4e5f6789abcdef0","scope":"POST:company.openapi.com/webhook","domain":"company.openapi.com","active":false,"startedAt":"2026-02-12T10:00:00+00:00","createdAt":"2026-02-12T09:59:55+00:00","completedAt":"2026-02-12T10:00:05+00:00","httpResponseCode":200,"data":{"event":"user.created","userId":"12345"},"custom":{"trackingId":"abc-123"},"headers":{"Content-Type":"application/json","X-Webhook-Signature":"sha256=..."},"elapsedTime":5234,"attempt":1,"retry":0,"field":"webhookUrl","method":"POST","url":"https://example.com/callback"}}}}},"404":{"description":"Callback introuvable","content":{"application/json":{"example":{"success":false,"message":"Callback not found","error":200,"data":null}}}}},"security":[{"Basic-Authentication":[]}]}},"/wallet/transactions":{"get":{"summary":"Obtenir l'historique des transactions du wallet","tags":["Wallet"],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0},"description":"Nombre de transactions à ignorer pour la pagination"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"maximum":100},"description":"Nombre maximum de transactions à renvoyer"}],"responses":{"200":{"description":"Liste des transactions du wallet","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WalletTransaction"}}}},"example":{"data":[{"id":"txn_65a1b2c3d4e5f6789abc001","amount":-15.5,"createdAt":"2026-02-12T08:30:00+00:00","description":"Utilisation de l'API - company.openapi.com"},{"id":"txn_65a1b2c3d4e5f6789abc002","amount":100,"createdAt":"2026-02-10T14:15:00+00:00","description":"Recharge du wallet"},{"id":"txn_65a1b2c3d4e5f6789abc003","amount":-5.25,"createdAt":"2026-02-09T11:20:00+00:00","description":"Utilisation de l'API - sms.openapi.com"}]}}}}},"security":[{"Basic-Authentication":[]}]}},"/subscriptions/{id}":{"get":{"summary":"Obtenir l'abonnement par ID","tags":["Subscriptions"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID d'abonnement"}],"responses":{"200":{"description":"Détail de l'abonnement","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Subscription"}}},"example":{"data":{"id":"656d1e2f8b3c2a001f7e4a20","scope":"GET:company.openapi.com/resource","domain":"company.openapi.com","active":true,"startsAt":"2025-11-01T00:00:00+00:00","expiresAt":"2025-12-01T00:00:00+00:00","totalRequests":"1000","availableRequests":"950","pricePerRequest":0.01,"type":"monthly","autorenew":true,"createdAt":"2025-10-25T10:00:00+00:00","updatedAt":"2025-11-19T15:30:00+00:00","price":10}}}}},"404":{"description":"Abonnement non trouvé","content":{"application/json":{"example":{"success":false,"message":"Subscription not found","error":220,"data":null}}}}},"security":[{"Basic-Authentication":[]}]}}},"components":{"securitySchemes":{"Basic-Authentication":{"description":"Authentification de base avec EMAIL et APIKEY. Utilisez la clé API comme mot de passe et l'e-mail associé à la clé API comme nom d'utilisateur dans l'en-tête d'autorisation.","name":"Authorization","type":"http","scheme":"basic"},"Refresh-Authentication":{"description":"Authentification par jeton porteur. Utiliser un jeton de rafraîchissement comme jeton de support dans l'en-tête d'autorisation uniquement pour le point de terminaison PATCH /tokens/{id} afin de mettre à jour un jeton en utilisant son jeton de rafraîchissement au lieu du jeton d'accès.","type":"http","scheme":"bearer"}},"schemas":{"TokenListOrDetail":{"type":"object","properties":{"data":{"oneOf":[{"type":"array","items":{"$ref":"#/components/schemas/TokenDetail"}},{"$ref":"#/components/schemas/TokenDetail"}]}}},"TokenDetail":{"type":"object","properties":{"token":{"type":"string","description":"Identifiant unique du jeton","example":"656d1e2f8b3c2a001f7e4a12"},"name":{"type":"string","description":"Nom du jeton lisible par l'homme","example":"Service X API token"},"createdAt":{"type":"string","format":"date-time","description":"Horodatage de la création","example":"2025-11-19T10:00:00Z"},"expireAt":{"type":"string","format":"date-time","description":"Horodatage de l'expiration","example":"2025-12-19T10:00:00Z"},"updatedAt":{"type":"string","format":"date-time","description":"Date de la dernière mise à jour","example":"2025-11-20T09:00:00Z"},"scopes":{"type":"array","items":{"type":"string"},"description":"Champs d'application associés","example":["GET:api.openapi.com/resource"]},"refreshToken":{"type":"string","description":"Jeton de rafraîchissement associé. Est utilisé pour prolonger le TTL du jeton","example":"656d1e2f8b3c2a001f7e4a13"},"limits":{"$ref":"#/components/schemas/TokenLimits"},"stats":{"$ref":"#/components/schemas/TokenStats"}}},"TokenCreate":{"type":"object","description":"Données pour créer un nouveau jeton","properties":{"scopes":{"type":"array","description":"Liste des champs d'application demandés","items":{"type":"string","example":"GET:api.openapi.com/resource"},"example":["GET:api.openapi.com/resource","POST:other.openapi.com/other"]},"name":{"type":"string","description":"Nom du jeton lisible par l'homme","example":"Service X API token"},"ttl":{"type":"integer","description":"Durée de vie du jeton en secondes. Maximum 1 an. Si une valeur négative ou 0 est fournie, la valeur est automatiquement ramenée au TTL par défaut.","example":2592000},"limits":{"$ref":"#/components/schemas/TokenLimits"}},"required":["scopes"]},"TokenUpdate":{"type":"object","description":"Données permettant de mettre à jour un jeton existant. L'authentification peut utiliser un jeton d'accès du porteur ou, alternativement, un jeton de rafraîchissement transmis en tant que jeton du porteur dans l'en-tête d'autorisation. Lors de l'utilisation d'un jeton de rafraîchissement, un nouveau jeton et un nouveau jeton de rafraîchissement ayant la même portée sont renvoyés, et le jeton précédent est supprimé.","properties":{"scopes":{"type":"array","description":"Nouvelle liste de champs d'application","items":{"type":"string","example":"GET:api.openapi.com/resource"},"example":["GET:api.openapi.com/resource","POST:other.openapi.com/other"]},"name":{"type":"string","description":"Nouveau nom du jeton","example":"Updated token"},"ttl":{"type":"integer","description":"Nouvelle durée de vie en quelques secondes","example":604800},"limits":{"$ref":"#/components/schemas/TokenLimits"}}},"TokenLimits":{"type":"object","description":"Limites d'utilisation associées au jeton","properties":{"totalRequests":{"type":"integer","description":"Nombre maximal de demandes autorisées","example":10000},"walletRequests":{"type":"integer","description":"Nombre maximum de demandes de wallet payées autorisées","example":1000},"subscriptionRequests":{"type":"integer","description":"Nombre maximum de demandes d'abonnement autorisées","example":500},"walletAmount":{"type":"number","description":"Montant maximum utilisable à partir du wallet associé","example":50},"ip":{"type":"array","description":"Liste des adresses IP autorisées","items":{"type":"string","example":"192.168.1.1"},"example":["192.168.1.1","10.0.0.2"]}}},"TokenStats":{"type":"object","description":"Statistiques d'utilisation du jeton","properties":{"totalRequests":{"type":"integer","description":"Nombre total de demandes effectuées","example":1234},"walletRequests":{"type":"integer","description":"Nombre de demandes de portefeuilles payants effectuées","example":120},"subscriptionRequests":{"type":"integer","description":"Nombre de demandes d'abonnement effectuées","example":30},"errorRequests":{"type":"integer","description":"Nombre de demandes ayant donné lieu à une erreur","example":5},"walletAmount":{"type":"number","description":"Montant total dépensé via le wallet","example":12.5},"ip":{"type":"array","description":"Liste des adresses IP utilisées","items":{"type":"string","example":"192.168.1.1"},"example":["192.168.1.1","10.0.0.2"]}}},"UserScope":{"type":"object","description":"Informations de base sur le champ d'application disponibles dans la vue en liste","properties":{"id":{"type":"string","description":"Identifiant unique du champ d'application","example":"656d1e2f8b3c2a001f7e4a14"},"scope":{"type":"string","description":"Nom du champ d'application","example":"GET:api.openapi.com/resource"},"method":{"type":"string","description":"Méthode HTTP","example":"GET"},"endpoint":{"type":"string","description":"Point final associé","example":"resource"},"domain":{"type":"string","description":"Domaine associé","example":"api.openapi.com"},"enabled":{"type":"boolean","description":"Si cette portée est activée pour l'utilisateur authentifié","example":true}}},"ScopeDetail":{"type":"object","description":"Informations détaillées sur le champ d'application, y compris les limites, les exigences et les prix","allOf":[{"$ref":"#/components/schemas/UserScope"},{"type":"object","properties":{"rateLimit":{"oneOf":[{"type":"string"},{"type":"boolean"}],"description":"Limite de taux pour ce champ d'application, ou false s'il n'y a pas de limite","example":false},"freeLimits":{"$ref":"#/components/schemas/ScopeLimits"},"requirements":{"type":"object","description":"Exigences pour ce champ d'application avec leur état d'avancement","additionalProperties":{"type":"boolean"},"example":{"id_card":false,"oa_general_contract":false}},"prices":{"type":"object","description":"Informations sur les prix pour ce champ d'application par clé de prix","additionalProperties":{"type":"number"},"example":{"ch-start":0.06}}}}]},"ScopeLimits":{"type":"object","description":"Limites d'utilisation gratuite pour un champ d'application","properties":{"dayLimit":{"oneOf":[{"type":"integer"},{"type":"boolean"}],"description":"Limite quotidienne de la demande, ou faux si aucune limite n'est fixée","example":0},"monthLimit":{"oneOf":[{"type":"integer"},{"type":"boolean"}],"description":"Limite mensuelle des demandes, ou faux si aucune limite n'est fixée","example":false},"yearLimit":{"oneOf":[{"type":"integer"},{"type":"boolean"}],"description":"Limite annuelle de la demande, ou faux si aucune limite n'est fixée","example":false},"totalLimit":{"oneOf":[{"type":"integer"},{"type":"boolean"}],"description":"Limite totale des demandes (durée de vie), ou faux si aucune limite n'est fixée","example":false}}},"ErrorLog":{"type":"object","description":"Entrée du journal des erreurs","properties":{"id":{"type":"string","description":"Identifiant unique du journal d'erreurs","example":"69822d1d48be79971b04351a"},"scope":{"type":"string","description":"Champ d'application à l'origine de l'erreur","example":"DELETE:oauth.openapi.com/tokens"},"domain":{"type":"string","description":"Domaine de l'API où l'erreur s'est produite","example":"oauth.openapi.com"},"errorAt":{"type":"string","format":"date-time","description":"Date à laquelle l'erreur s'est produite","example":"2026-02-03T17:15:09+00:00"},"httpResponseCode":{"type":"integer","description":"Code d'état de la réponse HTTP","example":404},"errorCode":{"type":"number","description":"Code d'erreur interne","example":131},"message":{"type":"string","description":"Message d'erreur","example":"Not Found"},"ip":{"type":"string","description":"Adresse IP qui a déclenché l'erreur","example":"93.146.69.125"}}},"Wallet":{"type":"object","description":"Informations sur le wallet","properties":{"credit":{"type":"number","description":"Solde créditeur actuel du wallet","example":125.5},"createdAt":{"type":"string","format":"date-time","description":"Date de création du wallet","example":"2025-01-15T10:00:00+00:00"},"updatedAt":{"type":"string","format":"date-time","description":"Date de la dernière mise à jour du wallet","example":"2026-02-12T08:30:00+00:00"}}},"WalletTransaction":{"type":"object","description":"Entrée de la transaction du wallet","properties":{"id":{"type":"string","description":"Identifiant unique de la transaction","example":"txn_65a1b2c3d4e5f6789abc001"},"amount":{"type":"number","description":"Montant de la transaction (négatif pour les dépenses, positif pour les crédits)","example":-15.5},"createdAt":{"type":"string","format":"date-time","description":"Horodatage de la transaction","example":"2026-02-12T08:30:00+00:00"},"description":{"type":"string","description":"Description de la transaction","example":"API usage - company.openapi.com"}}},"CallbackListElement":{"type":"object","description":"Simplification des informations de rappel pour la vue en liste","properties":{"id":{"type":"string","description":"Identifiant unique du rappel","example":"65a1b2c3d4e5f6789abcdef0"},"scope":{"type":"string","description":"Champ d'application qui a déclenché ce rappel","example":"POST:company.openapi.com/webhook"},"url":{"type":"string","description":"URL de destination du rappel","example":"https://example.com/callback"},"httpResponseCode":{"type":"string","description":"Code de réponse HTTP reçu de l'URL de rappel","example":"200"},"startedAt":{"type":"string","format":"date-time","description":"Heure de début de l'exécution du callback","example":"2026-02-12T10:00:00+00:00"},"completedAt":{"type":"string","format":"date-time","description":"Heure de fin d'exécution du callback (null si toujours actif)","example":"2026-02-12T10:00:05+00:00","nullable":true}}},"Callback":{"type":"object","description":"Informations complètes sur le rappel","properties":{"id":{"type":"string","description":"Identifiant unique du rappel","example":"65a1b2c3d4e5f6789abcdef0"},"scope":{"type":"string","description":"Champ d'application qui a déclenché ce rappel","example":"POST:company.openapi.com/webhook"},"domain":{"type":"string","description":"Domaine de l'API pour ce rappel","example":"company.openapi.com","nullable":true},"active":{"type":"boolean","description":"Si le rappel est toujours actif (non terminé)","example":false},"startedAt":{"type":"string","format":"date-time","description":"Heure de début de l'exécution du callback","example":"2026-02-12T10:00:00+00:00"},"createdAt":{"type":"string","format":"date-time","description":"Heure de création du rappel","example":"2026-02-12T09:59:55+00:00"},"completedAt":{"type":"string","format":"date-time","description":"Temps d'achèvement de l'exécution du callback","example":"2026-02-12T10:00:05+00:00","nullable":true},"httpResponseCode":{"type":"integer","description":"Code de réponse HTTP reçu de l'URL de rappel","example":200},"data":{"type":"object","description":"Données de la charge utile du rappel","example":{"event":"user.created","userId":"12345"}},"custom":{"description":"Données personnalisées associées au rappel","example":{"trackingId":"abc-123"}},"headers":{"type":"object","description":"En-têtes HTTP envoyés avec le rappel","example":{"Content-Type":"application/json","X-Webhook-Signature":"sha256=..."}},"elapsedTime":{"type":"integer","description":"Temps d'exécution du rappel en millisecondes","example":5234},"attempt":{"type":"integer","description":"Numéro de la tentative en cours","example":1},"retry":{"type":"integer","description":"Nombre de tentatives effectuées","example":0},"field":{"type":"string","description":"Identifiant de champ pour le rappel","example":"webhookUrl"},"method":{"type":"string","description":"Méthode HTTP utilisée pour le rappel","example":"POST"},"url":{"type":"string","description":"URL de destination du rappel","example":"https://example.com/callback"}}},"SubscriptionListElement":{"type":"object","description":"Simplification des informations sur les abonnements pour la vue en liste","properties":{"id":{"type":"string","description":"Identifiant unique de l'abonnement","example":"656d1e2f8b3c2a001f7e4a20"},"scope":{"type":"string","description":"Champ d'application Cet abonnement s'applique à","example":"GET:company.openapi.com/resource"},"active":{"type":"boolean","description":"Si l'abonnement est actuellement actif","example":true},"availableRequests":{"type":"string","description":"Nombre de demandes disponibles dans cet abonnement","example":"950"},"startsAt":{"type":"string","format":"date-time","description":"Date de début de l'abonnement","example":"2025-11-01T00:00:00+00:00"},"expiresAt":{"type":"string","format":"date-time","description":"Date d'expiration de l'abonnement","example":"2025-12-01T00:00:00+00:00"}}},"Subscription":{"type":"object","description":"Informations complètes sur l'abonnement","properties":{"id":{"type":"string","description":"Identifiant unique de l'abonnement","example":"656d1e2f8b3c2a001f7e4a20"},"scope":{"type":"string","description":"Champ d'application Cet abonnement s'applique à","example":"GET:company.openapi.com/resource"},"domain":{"type":"string","description":"Domaine API pour cet abonnement","example":"company.openapi.com"},"active":{"type":"boolean","description":"Si l'abonnement est actuellement actif","example":true},"startsAt":{"type":"string","format":"date-time","description":"Date de début de l'abonnement","example":"2025-11-01T00:00:00+00:00"},"expiresAt":{"type":"string","format":"date-time","description":"Date d'expiration de l'abonnement","example":"2025-12-01T00:00:00+00:00"},"totalRequests":{"type":"string","description":"Nombre total de demandes initialement incluses dans cet abonnement","example":"1000"},"availableRequests":{"type":"string","description":"Nombre de demandes encore disponibles dans cet abonnement","example":"950"},"pricePerRequest":{"type":"number","description":"Prix par demande pour cet abonnement","example":0.01},"type":{"type":"string","description":"Type d'abonnement (par exemple, mois, année)","example":"month"},"autorenew":{"type":"boolean","description":"Renouvellement automatique ou non de l'abonnement","example":true},"createdAt":{"type":"string","format":"date-time","description":"Date de création de l'abonnement","example":"2025-10-25T10:00:00+00:00"},"updatedAt":{"type":"string","format":"date-time","description":"Date de la dernière mise à jour","example":"2025-11-19T15:30:00+00:00"},"price":{"type":"number","description":"Prix total de l'abonnement","example":10}}}}},"externalDocs":{"description":"C'est la première fois que vous venez ici ? Générer un nouveau jeton d'accès","url":"https://console.openapi.com/fr/oauth"}}