payfit
payfit.
The PayFit company the API key belongs to — name, country, registration
setup & usage
connecte-toi à PayFit en admin de l'entreprise, puis Intégrations → API (app.payfit.com/integrations/hub/api) → « Créer une clé » : donne-lui un libellé explicite et coche les scopes, puis copie-la — elle n'est plus affichée ensuite. colle-la dans tes clés de connecteur oto sous payfit.
collaborators:read, collaborators:management:read, collaborators:contracts:read, collaborators:personal:read, collaborators:legal-identity:read, contracts:read, contracts:payslips:read, time:read, accounting:read, health-insurance:read, collaborators:meal-vouchers:readcollaborators:social-security:read (NIR), collaborators:bank-info:read (IBAN), payment-files:read (fichier de virement)collaborators:write, collaborators:contracts:write, time:write, health-insurance:writeune clé PayFit n'ouvre qu'une entreprise, et l'API n'a aucune vue de groupe : deux sociétés = deux clés indépendantes. crée une clé dans chaque entreprise PayFit, puis pose-les comme autant de comptes nommés du connecteur payfit (un nom par société).
_account="<nom>" sur l'outil (oto_identity(op='list') pour les lister)oto_identity(op='set', connector='payfit', identity_id='<nom>')_account serait le chiffre d'une seule société présenté comme celui du groupecommence par payfit_company() : son country dit si les variantes françaises s'appliquent (contrats FR, titres-restaurant, temps de travail, mutuelle).
payfit_collaborator() (page suivante : cursor=<next_cursor>)payfit_contract(fr=True) (natureContratDsn : 01 CDI, 02 CDD… ; workingTimeModality : forfait_jours…)payfit_absence(begin_date="AAAA-MM-JJ", end_date="AAAA-MM-JJ"), puis relie contractId aux contracts d'un collaborateurpayfit_payroll(op="accounting", date="202601") : une ligne par écriture, avec compte, libellé, débit, crédit, salarié et codes analytiques. c'est la seule donnée chiffrée structurée de l'API — masse salariale, charges et avantages en nature s'y lisent par numéro de compte (641x, 645x, 6417x)payfit_payroll(date="202601") (op status par défaut) avant d'exploiter des chiffrespayfit_payroll(op="accounting_export", date="202601") ; « le fichier de virement » → op="payment_file" — documents verrouillés par défaut, cf. la note sur les données personnellespayfit_payslip(collaborator_id=…) pour la liste, puis op="download" avec les trois identifiants de la ligne (le PDF est verrouillé par défaut, comme tout document)payfit_worked_time(date="202601") · « titres-restaurant » → payfit_meal_voucher(date="202601")payfit_insurance() pour les contrats de l'entreprise, kind="provident" pour la prévoyance202601), jamais 2026-01 : c'est la seule forme que PayFit acceptequatre écritures existent, et toutes partent en `dry_run=True` par défaut : l'appel te rend ce qu'il enverrait, sans rien écrire. il faut passer dry_run=False délibérément.
payfit_collaborator(op="create", …) crée une vraie personne ; invite_collaborator=True lui envoie un e-mailpayfit_contract(op="create", …) la met en paiepayfit_absence(op="create", …) enregistre une absence déjà validée — cette API n'a aucun circuit d'approbation, ce que tu écris part en paie ; op="cancel" l'annulepayfit_insurance(op="affiliate", …) remplace l'affiliation du contrat : un id omis désaffilie. lis l'état courant (payfit_contract(op="get", fr=True)) avant d'écrire. op="regularize" recalcule des cotisations déjà passées en paieces questions reviennent souvent et n'ont aucun endpoint — oto ne les fabriquera pas, et une réponse inventée serait fausse :
payfit_worked_time)payfit_document) sont britanniques ; sur une entreprise française la liste est vide, et c'est la bonne réponsele connecteur ne retire plus rien en dur : il sert ce que la clé autorise, et la protection est une politique d'org, modifiable.
absence_type) — maladie, accident du travail, maternité sont des données de santé. un •••• est une valeur masquée, pas une donnée absenteabsence_category reste toujours lisible : ordinary_leave (congés payés, RTT, repos, sans solde, télétravail, école) ou restricted pour tout le reste — de quoi planifier une charge sans lire un motifpayfit (dashboard → carte du connecteur → transformations, ou oto_org_settings domain=field_filters op=set service=payfit rules=[]). la politique d'org est autoritaire : rules: [] lève tout. ⚠️ *effacer* la politique (rules: null) fait l'inverse — ça remet le défaut serveurrules: []). sinon l'appel est refusé en le disant, et le refus n'est pas un bug. si la politique ne peut pas être lue, le document est refusé aussioutils
utilisation
claude plugin marketplace add otomata-tech/oto-plugin — mcp + skill configurés.pipx install oto-cli puis oto payfit …