{"openapi":"3.0.3","info":{"title":"Timi — API partenaires","version":"1.0.0","description":"What a CGP / Courtier sees of the dossiers an expert-comptable transmitted to them in Timi, for Eres’s applications (the Souscription parcours first) to display and to act on. Served under `/api/partners/v1/eres`, with the CGP’s own Eres token.\n\n## Authentication\n\nEvery call carries the CGP’s **Eres** access token — the one the Eres application already holds — as `Authorization: Bearer <token>`. Timi verifies it against the Eres realm of the environment (`preprod` for develop, `production` for production) and never issues a token of its own for this API.\n\nThe token must grant one of the realm roles `ROLE_SUBSCRIPTION_ADVISOR` (Eres emits its roles in the flat `roles` claim). The CGP is then matched by the token’s verified `email` to the partner directory of each accounting firm that registered them.\n\n## Errors\n\nEvery error is a JSON `Error` body with a stable `code`, and every answer carries an `X-Request-Id` header to quote to Timi support.\n\n## Status lifecycle\n\n`SENT` → `OPENED` → `SUBSCRIBED` → `SIGNED` → `ACTIVE`, with `CANCELLED` reachable from any state but `ACTIVE`. Reading a dossier moves it to `OPENED`; `POST …/status` reports the rest. Reports only move forward: a status already reached is accepted and leaves the record unchanged.\n\n## Getting started\n\n1. Call the API from your application with the CGP’s Eres access token; there is nothing to register with Timi and no secret to exchange.\n2. Tell Timi the `client_id` (`azp`) of the calling application, so it can be admitted.\n3. Start with `GET /me`: a CGP has dossiers only once an accounting firm has registered them as a partner under the e-mail of their Eres account and transmitted a dossier to them.\n4. Report the statuses as the subscription progresses (`SUBSCRIBED`, `SIGNED`, `ACTIVE`, `CANCELLED`).\n\nQuote the `X-Request-Id` of any answer when writing to Timi support."},"servers":[{"url":"https://sandbox-2-api-fcm7moozgq-od.a.run.app/api/partners/v1/eres","description":"This server"},{"url":"https://api.develop.timi.pro/api/partners/v1/eres","description":"Develop — tokens of the Eres `preprod` realm"},{"url":"https://api.timi.pro/api/partners/v1/eres","description":"Production — tokens of the Eres `production` realm"}],"security":[{"eresToken":[]}],"tags":[{"name":"Identity","description":"Who the token is, on the Timi side."},{"name":"Dossiers","description":"The dossiers transmitted to the CGP and their recommendation."},{"name":"Documents","description":"The accords drafted by the accounting firm."},{"name":"Contract","description":"This document."}],"paths":{"/":{"get":{"tags":["Contract"],"operationId":"getIndex","summary":"This root","description":"What a reader lands on when opening the server URL: the name and version of this API, where its documentation and contracts are, and the operations behind it. Public.","security":[],"responses":{"200":{"description":"The index of this root.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Index"}}}}}}},"/me":{"get":{"tags":["Identity"],"operationId":"getMe","summary":"Who the token resolves to","description":"The partner records the CGP’s e-mail matches, one per accounting firm. Call it first: an empty dossier list is explained here (no accounting firm has registered this e-mail yet).","responses":{"200":{"description":"The CGP’s partner records.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"401":{"description":"No bearer token, or one that is not a valid, unexpired token of the Eres realm.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"UNAUTHORIZED":{"summary":"No token, or not a valid token of the Eres realm","value":{"error":"Unauthorized","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}}}}}},"403":{"description":"The token is valid but the API will not act for it: `ERES_CLIENT_NOT_ALLOWED` (the calling application is not admitted), `ERES_ROLE_REQUIRED` (the CGP lacks the required role), `USER_NOT_REGISTERED` (no accounting firm has registered this e-mail as a partner), `PROJECT_NOT_TRANSMITTED` (the dossier exists but was not transmitted to this CGP).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"ERES_CLIENT_NOT_ALLOWED":{"summary":"The calling application is not admitted","value":{"code":"ERES_CLIENT_NOT_ALLOWED","error":"Calling application not allowed","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}},"ERES_ROLE_REQUIRED":{"summary":"The CGP lacks the required role","value":{"code":"ERES_ROLE_REQUIRED","error":"Advisor role required","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}},"USER_NOT_REGISTERED":{"summary":"No accounting firm registered this e-mail as a partner","value":{"code":"USER_NOT_REGISTERED","error":"User not registered","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}},"PROJECT_NOT_TRANSMITTED":{"summary":"The dossier was not transmitted to this CGP","value":{"code":"PROJECT_NOT_TRANSMITTED","error":"Project not transmitted to this partner","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}}}}}}}}},"/dossiers":{"get":{"tags":["Dossiers"],"operationId":"listDossiers","summary":"The dossiers transmitted to the CGP","description":"Every dossier an accounting firm transmitted to one of the CGP’s partner records, most recent first. Reading the list does not change any status.","responses":{"200":{"description":"The dossiers.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DossierList"}}}},"401":{"description":"No bearer token, or one that is not a valid, unexpired token of the Eres realm.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"UNAUTHORIZED":{"summary":"No token, or not a valid token of the Eres realm","value":{"error":"Unauthorized","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}}}}}},"403":{"description":"The token is valid but the API will not act for it: `ERES_CLIENT_NOT_ALLOWED` (the calling application is not admitted), `ERES_ROLE_REQUIRED` (the CGP lacks the required role), `USER_NOT_REGISTERED` (no accounting firm has registered this e-mail as a partner), `PROJECT_NOT_TRANSMITTED` (the dossier exists but was not transmitted to this CGP).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"ERES_CLIENT_NOT_ALLOWED":{"summary":"The calling application is not admitted","value":{"code":"ERES_CLIENT_NOT_ALLOWED","error":"Calling application not allowed","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}},"ERES_ROLE_REQUIRED":{"summary":"The CGP lacks the required role","value":{"code":"ERES_ROLE_REQUIRED","error":"Advisor role required","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}},"USER_NOT_REGISTERED":{"summary":"No accounting firm registered this e-mail as a partner","value":{"code":"USER_NOT_REGISTERED","error":"User not registered","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}},"PROJECT_NOT_TRANSMITTED":{"summary":"The dossier was not transmitted to this CGP","value":{"code":"PROJECT_NOT_TRANSMITTED","error":"Project not transmitted to this partner","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}}}}}}}}},"/dossiers/{dossierId}":{"get":{"tags":["Dossiers"],"operationId":"getDossier","summary":"The recommendation of a dossier","description":"Company, dirigeant contact, the recommended mechanisms and plans (with abondement terms), the beneficiaries and which accords exist. The first read moves the transmission from `SENT` to `OPENED`.","parameters":[{"name":"dossierId","in":"path","required":true,"description":"The Timi dossier id, as listed by GET /dossiers.","schema":{"type":"string","maxLength":64,"pattern":"^[A-Za-z0-9._:-]+$"}}],"responses":{"200":{"description":"The dossier.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DossierDetail"}}}},"401":{"description":"No bearer token, or one that is not a valid, unexpired token of the Eres realm.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"UNAUTHORIZED":{"summary":"No token, or not a valid token of the Eres realm","value":{"error":"Unauthorized","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}}}}}},"403":{"description":"The token is valid but the API will not act for it: `ERES_CLIENT_NOT_ALLOWED` (the calling application is not admitted), `ERES_ROLE_REQUIRED` (the CGP lacks the required role), `USER_NOT_REGISTERED` (no accounting firm has registered this e-mail as a partner), `PROJECT_NOT_TRANSMITTED` (the dossier exists but was not transmitted to this CGP).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"ERES_CLIENT_NOT_ALLOWED":{"summary":"The calling application is not admitted","value":{"code":"ERES_CLIENT_NOT_ALLOWED","error":"Calling application not allowed","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}},"ERES_ROLE_REQUIRED":{"summary":"The CGP lacks the required role","value":{"code":"ERES_ROLE_REQUIRED","error":"Advisor role required","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}},"USER_NOT_REGISTERED":{"summary":"No accounting firm registered this e-mail as a partner","value":{"code":"USER_NOT_REGISTERED","error":"User not registered","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}},"PROJECT_NOT_TRANSMITTED":{"summary":"The dossier was not transmitted to this CGP","value":{"code":"PROJECT_NOT_TRANSMITTED","error":"Project not transmitted to this partner","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}}}}}},"404":{"description":"No such dossier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"NOT_FOUND":{"summary":"No such dossier","value":{"error":"Project not found","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}}}}}}}}},"/dossiers/{dossierId}/status":{"post":{"tags":["Dossiers"],"operationId":"reportDossierStatus","summary":"Report where the subscription stands","description":"Moves the transmission forward. Idempotent: a status already reached, or already passed, answers 200 with `changed: false`. A report that contradicts the record — `CANCELLED` after `ACTIVE`, or anything after `CANCELLED` — is a 409 `TRANSMISSION_STATUS_CONFLICT`. The change is recorded in the dossier’s audit trail under the CGP’s e-mail.","parameters":[{"name":"dossierId","in":"path","required":true,"description":"The Timi dossier id, as listed by GET /dossiers.","schema":{"type":"string","maxLength":64,"pattern":"^[A-Za-z0-9._:-]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["OPENED","SUBSCRIBED","SIGNED","ACTIVE","CANCELLED"],"description":"Where the subscription now stands. A status the transmission already reached, or already passed, is accepted and leaves it unchanged (the endpoint is idempotent and tolerates out-of-order delivery); one that contradicts the record is a 409."}},"required":["status"]},"examples":{"subscribed":{"summary":"The CGP started the subscription","value":{"status":"SUBSCRIBED"}},"signed":{"summary":"The company signed","value":{"status":"SIGNED"}},"cancelled":{"summary":"The subscription was abandoned","value":{"status":"CANCELLED"}}}}}},"responses":{"200":{"description":"The transmission after the report.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusUpdate"},"examples":{"advanced":{"summary":"The report moved the transmission forward","value":{"changed":true,"dossierId":"81c56f91-f0da-4f44-a6ca-ea069071b6a3","previousStatus":"OPENED","status":"SUBSCRIBED"}},"replayed":{"summary":"Already reflected: nothing changed","value":{"changed":false,"dossierId":"81c56f91-f0da-4f44-a6ca-ea069071b6a3","previousStatus":"SUBSCRIBED","status":"SUBSCRIBED"}}}}}},"400":{"description":"`INVALID_INPUT` — `status` missing or not one of the reportable values; `fields` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"INVALID_INPUT":{"summary":"A status outside the reportable values","value":{"code":"INVALID_INPUT","error":"Invalid input","fields":{"status":{"code":"identifier.invalid"}},"requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}}}}}},"401":{"description":"No bearer token, or one that is not a valid, unexpired token of the Eres realm.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"UNAUTHORIZED":{"summary":"No token, or not a valid token of the Eres realm","value":{"error":"Unauthorized","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}}}}}},"403":{"description":"The token is valid but the API will not act for it: `ERES_CLIENT_NOT_ALLOWED` (the calling application is not admitted), `ERES_ROLE_REQUIRED` (the CGP lacks the required role), `USER_NOT_REGISTERED` (no accounting firm has registered this e-mail as a partner), `PROJECT_NOT_TRANSMITTED` (the dossier exists but was not transmitted to this CGP).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"ERES_CLIENT_NOT_ALLOWED":{"summary":"The calling application is not admitted","value":{"code":"ERES_CLIENT_NOT_ALLOWED","error":"Calling application not allowed","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}},"ERES_ROLE_REQUIRED":{"summary":"The CGP lacks the required role","value":{"code":"ERES_ROLE_REQUIRED","error":"Advisor role required","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}},"USER_NOT_REGISTERED":{"summary":"No accounting firm registered this e-mail as a partner","value":{"code":"USER_NOT_REGISTERED","error":"User not registered","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}},"PROJECT_NOT_TRANSMITTED":{"summary":"The dossier was not transmitted to this CGP","value":{"code":"PROJECT_NOT_TRANSMITTED","error":"Project not transmitted to this partner","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}}}}}},"404":{"description":"No such dossier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"NOT_FOUND":{"summary":"No such dossier","value":{"error":"Project not found","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}}}}}},"409":{"description":"`TRANSMISSION_STATUS_CONFLICT` — the report contradicts the current status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"TRANSMISSION_STATUS_CONFLICT":{"summary":"CANCELLED reported on plans already in force","value":{"code":"TRANSMISSION_STATUS_CONFLICT","error":"Status conflicts with the current one","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}}}}}}}}},"/dossiers/{dossierId}/documents/{kind}":{"get":{"tags":["Documents"],"operationId":"downloadDossierDocument","summary":"Download an accord (.docx)","description":"The accord d’intéressement or de participation the accounting firm drafted, as a Word document, when `documents.<kind>` is true on the dossier. Requires the accounting firm’s Timi plan to include document generation (otherwise 403 `TRIAL_FEATURE_LOCKED`).","parameters":[{"name":"dossierId","in":"path","required":true,"description":"The Timi dossier id, as listed by GET /dossiers.","schema":{"type":"string","maxLength":64,"pattern":"^[A-Za-z0-9._:-]+$"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","enum":["interessement","participation"]}},{"name":"scenario","in":"query","required":false,"description":"Which recommendation scenario (A, B…); the latest when omitted.","schema":{"type":"string","maxLength":50}},{"name":"submissionId","in":"query","required":false,"description":"Which recommendation submission; the latest when omitted.","schema":{"type":"string","maxLength":64}}],"responses":{"200":{"description":"The document.","headers":{"Content-Disposition":{"schema":{"type":"string"},"description":"attachment; filename=…"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"schema":{"type":"string","format":"binary"}}}},"401":{"description":"No bearer token, or one that is not a valid, unexpired token of the Eres realm.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"UNAUTHORIZED":{"summary":"No token, or not a valid token of the Eres realm","value":{"error":"Unauthorized","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}}}}}},"403":{"description":"As on the other endpoints, plus `TRIAL_FEATURE_LOCKED` when the accounting firm’s Timi plan does not include document generation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"TRIAL_FEATURE_LOCKED":{"summary":"The accounting firm’s plan does not include document generation","value":{"code":"TRIAL_FEATURE_LOCKED","error":"Feature not available","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}},"PROJECT_NOT_TRANSMITTED":{"summary":"The dossier was not transmitted to this CGP","value":{"code":"PROJECT_NOT_TRANSMITTED","error":"Project not transmitted to this partner","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}},"ERES_ROLE_REQUIRED":{"summary":"The CGP lacks the required role","value":{"code":"ERES_ROLE_REQUIRED","error":"Advisor role required","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}}}}}},"404":{"description":"No such dossier, or no such accord drafted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"NOT_FOUND":{"summary":"No such dossier","value":{"error":"Project not found","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}}}}}},"422":{"description":"The accord cannot be generated yet (`INTERESSEMENT_NO_OBJECTIVE`, `PARTICIPATION_CONFIG_INCOMPLETE`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{}}}}}}},"/docs":{"get":{"tags":["Contract"],"operationId":"getDocs","summary":"This document, readable","security":[],"responses":{"200":{"description":"An HTML page rendering /openapi.json (Scalar; ?ui=swagger for Swagger UI).","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/openapi.fr.json":{"get":{"tags":["Contract"],"operationId":"getOpenApiFr","summary":"This document, in French","security":[],"responses":{"200":{"description":"The same OpenAPI 3.0 document with its prose in French.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/openapi.json":{"get":{"tags":["Contract"],"operationId":"getOpenApi","summary":"This document","security":[],"responses":{"200":{"description":"The OpenAPI 3.0 document.","content":{"application/json":{"schema":{"type":"object"}}}}}}}},"components":{"securitySchemes":{"eresToken":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"An access token of the Eres Keycloak realm, obtained by the Eres application through its own login. Timi accepts nothing else on this API."}},"headers":{"X-Request-Id":{"description":"The id of this request in Timi’s logs. Quote it to Timi support.","schema":{"type":"string","format":"uuid"}}},"schemas":{"AccountingFirm":{"type":"object","properties":{"name":{"type":"string","description":"The expert-comptable cabinet that built the dossier."}},"required":["name"],"additionalProperties":false,"example":{"name":"Cabinet Dupont & Associés"}},"Index":{"type":"object","properties":{"name":{"type":"string","description":"The API this root belongs to."},"version":{"type":"string","description":"The contract version served here."},"documentation":{"type":"string","description":"The readable contract (Scalar), absolute URL."},"contract":{"type":"object","properties":{"en":{"type":"string","description":"The OpenAPI document in English, absolute URL."},"fr":{"type":"string","description":"The OpenAPI document in French, absolute URL."}},"required":["en","fr"],"additionalProperties":false,"description":"The machine-readable contract."},"endpoints":{"type":"array","items":{"type":"object","properties":{"method":{"type":"string"},"path":{"type":"string","description":"Relative to this root."},"summary":{"type":"string"}},"required":["method","path","summary"],"additionalProperties":false},"description":"The operations behind this root; every one but the contract needs a token."}},"required":["name","version","documentation","contract","endpoints"],"additionalProperties":false,"example":{"contract":{"en":"https://api.timi.pro/api/partners/v1/eres/openapi.json","fr":"https://api.timi.pro/api/partners/v1/eres/openapi.fr.json"},"documentation":"https://api.timi.pro/api/partners/v1/eres/docs","endpoints":[{"method":"GET","path":"/me","summary":"Who the token resolves to"},{"method":"GET","path":"/dossiers","summary":"The dossiers transmitted to the CGP"}],"name":"Timi — API partenaires, volet Eres","version":"1.0.0"}},"Beneficiaries":{"type":"object","properties":{"count":{"type":"integer","description":"Number of salariés listed."},"employees":{"type":"array","items":{"$ref":"#/components/schemas/Beneficiary"},"description":"The salariés (stagiaires excluded), dirigeant included when on payroll. Never their pay, NIR or home address."}},"required":["count","employees"],"additionalProperties":false,"example":{"count":17,"employees":[{"contractType":"CDI","firstName":"Manon","isLegalRepresentative":false,"lastName":"André","position":"Assistante comptable","seniorityDays":654,"startDate":"2024-11-14T23:00:00.000Z"},{"contractType":"CDI","firstName":"Chloé","isLegalRepresentative":false,"lastName":"Bertrand","position":"Collaboratrice comptable","seniorityDays":2182,"startDate":"2020-09-08T22:00:00.000Z"},{"contractType":"Apprentissage","firstName":"Lina","isLegalRepresentative":false,"lastName":"Bonnet","position":"Apprentie assistante comptable","seniorityDays":122,"startDate":"2026-04-30T22:00:00.000Z"}]}},"Beneficiary":{"type":"object","properties":{"firstName":{"nullable":true,"description":"Prénom.","type":"string"},"lastName":{"nullable":true,"description":"Nom.","type":"string"},"position":{"nullable":true,"description":"Poste.","type":"string"},"contractType":{"nullable":true,"description":"Type de contrat (CDI, CDD…).","type":"string"},"startDate":{"nullable":true,"description":"Contract start date (ISO 8601).","type":"string"},"seniorityDays":{"nullable":true,"description":"Seniority in days — as declared in the DSN, or counted from the start date; null when neither is known.","type":"integer"},"isLegalRepresentative":{"type":"boolean","description":"True for the dirigeant."}},"required":["firstName","lastName","position","contractType","startDate","seniorityDays","isLegalRepresentative"],"additionalProperties":false,"example":{"contractType":"CDI","firstName":"Manon","isLegalRepresentative":false,"lastName":"André","position":"Assistante comptable","seniorityDays":654,"startDate":"2024-11-14T23:00:00.000Z"}},"Company":{"type":"object","properties":{"name":{"type":"string","description":"Raison sociale."},"siren":{"nullable":true,"description":"SIREN.","type":"string"},"siret":{"nullable":true,"description":"SIRET of the head office — the value the Souscription parcours is pre-filled with.","type":"string"},"legalForm":{"nullable":true,"description":"Forme juridique.","type":"string"},"address":{"nullable":true,"description":"Head-office address, one line.","type":"string"},"codeNaf":{"nullable":true,"description":"Code NAF and its label.","type":"string"},"fiscalClosingDate":{"nullable":true,"description":"Fiscal year end (ISO 8601).","type":"string"},"headcount":{"nullable":true,"description":"Effectif salarié retained by the recommendation.","type":"number"},"legalRepresentative":{"nullable":true,"description":"Représentant légal — a person or, for an SAS, often another company.","type":"string"},"legalRepresentativeRole":{"nullable":true,"description":"Qualité of the représentant légal (Président, Gérant…).","type":"string"}},"required":["name","siren","siret","legalForm","address","codeNaf","fiscalClosingDate","headcount","legalRepresentative","legalRepresentativeRole"],"additionalProperties":false,"example":{"address":"19 RUE BERBIER DU METS, 75013, PARIS","codeNaf":"69.20Z — Activités comptables","fiscalClosingDate":"2026-12-31T00:00:00.000Z","headcount":17,"legalForm":"SARL, société à responsabilité limitée","legalRepresentative":"Marc Cuirot","legalRepresentativeRole":"Gérant","name":"PME 17 SALARIES","siren":"494185325","siret":"49418532500037"}},"Contact":{"type":"object","properties":{"firstname":{"nullable":true,"description":"Prénom of the dirigeant contact.","type":"string"},"lastname":{"nullable":true,"description":"Nom of the dirigeant contact.","type":"string"},"email":{"nullable":true,"description":"E-mail of the dirigeant contact.","type":"string"},"phone":{"nullable":true,"description":"Téléphone of the dirigeant contact.","type":"string"}},"required":["firstname","lastname","email","phone"],"additionalProperties":false,"example":{"email":"marc@pme17.fr","firstname":"Marc","lastname":"Cuirot","phone":"0612345678"}},"Documents":{"type":"object","properties":{"interessement":{"type":"boolean","description":"Whether the accord d’intéressement can be downloaded."},"participation":{"type":"boolean","description":"Whether the accord de participation can be downloaded."}},"required":["interessement","participation"],"additionalProperties":false,"description":"Which accords are drafted; each is served by GET …/documents/{kind}.","example":{"interessement":true,"participation":false}},"DossierDetail":{"type":"object","properties":{"dossierId":{"type":"string"},"dossierReference":{"type":"string","description":"Same label as on the list."},"transmission":{"$ref":"#/components/schemas/Transmission"},"accountingFirm":{"$ref":"#/components/schemas/AccountingFirm"},"eresPartnerCode":{"type":"string","description":"The Eres partner code the accounting firm registered the CGP under."},"company":{"$ref":"#/components/schemas/Company"},"contact":{"$ref":"#/components/schemas/Contact"},"recommendation":{"$ref":"#/components/schemas/Recommendation"},"beneficiaries":{"$ref":"#/components/schemas/Beneficiaries"},"documents":{"$ref":"#/components/schemas/Documents"},"subscriptionUrl":{"nullable":true,"description":"The pre-filled Eres Souscription URL Timi hands its own CGP space; null when not configured.","type":"string"}},"required":["dossierId","dossierReference","transmission","accountingFirm","eresPartnerCode","company","contact","recommendation","beneficiaries","documents","subscriptionUrl"],"additionalProperties":false,"example":{"accountingFirm":{"name":"Cabinet Dupont & Associés"},"beneficiaries":{"count":17,"employees":[{"contractType":"CDI","firstName":"Manon","isLegalRepresentative":false,"lastName":"André","position":"Assistante comptable","seniorityDays":654,"startDate":"2024-11-14T23:00:00.000Z"},{"contractType":"CDI","firstName":"Chloé","isLegalRepresentative":false,"lastName":"Bertrand","position":"Collaboratrice comptable","seniorityDays":2182,"startDate":"2020-09-08T22:00:00.000Z"},{"contractType":"Apprentissage","firstName":"Lina","isLegalRepresentative":false,"lastName":"Bonnet","position":"Apprentie assistante comptable","seniorityDays":122,"startDate":"2026-04-30T22:00:00.000Z"}]},"company":{"address":"19 RUE BERBIER DU METS, 75013, PARIS","codeNaf":"69.20Z — Activités comptables","fiscalClosingDate":"2026-12-31T00:00:00.000Z","headcount":17,"legalForm":"SARL, société à responsabilité limitée","legalRepresentative":"Marc Cuirot","legalRepresentativeRole":"Gérant","name":"PME 17 SALARIES","siren":"494185325","siret":"49418532500037"},"contact":{"email":"marc@pme17.fr","firstname":"Marc","lastname":"Cuirot","phone":"0612345678"},"documents":{"interessement":true,"participation":false},"dossierId":"81c56f91-f0da-4f44-a6ca-ea069071b6a3","dossierReference":"Timi-42","eresPartnerCode":"ERES-00421","recommendation":{"dispositif":["Abondement","Intéressement"],"headcount":17,"mechanisms":[{"dispositif":"Abondement","distribution":null,"duration":{"renewable":true,"years":1},"objective":null,"participationFormula":null,"paymentFrequency":null,"targetAmount":"2 029 € en moyenne par bénéficiaire, soit 3.6% de la masse salariale"},{"dispositif":"Intéressement","distribution":"Salaire","duration":{"renewable":false,"years":3},"objective":"À déterminer ensemble en prochaine étape : par exemple objectif financier et / ou opérationnel","participationFormula":null,"paymentFrequency":"Annuelle","targetAmount":"Entre 2.0% et 4.0% de la masse salariale, soit entre 1 143 € et 2 286 € en moyenne par bénéficiaire"}],"planSummaries":[{"abondement":{"matchableDeposits":["Versements volontaires","Intéressement"],"plafond":{"seniority_tiers":{"1_a_3_ans":1500,"3_a_5_ans":2100,"moins_de_1_an":900,"plus_de_5_ans":2700}},"rate":300},"key":"PEI","opened":true},{"abondement":null,"key":"PERECOI","opened":true}],"plans":["Plan Epargne Interentreprise (PEI)","Plan d’Épargne Retraite d’Entreprise Collectif Interentreprise (PERECOI)"]},"subscriptionUrl":"https://souscription.preprod.eres-group.com/?siret=49418532500037","transmission":{"status":"OPENED","transmittedAt":"2026-09-24T10:32:06.782Z"}}},"DossierList":{"type":"object","properties":{"dossiers":{"type":"array","items":{"$ref":"#/components/schemas/DossierSummary"},"description":"Most recently transmitted first."}},"required":["dossiers"],"additionalProperties":false,"example":{"dossiers":[{"accountingFirm":{"name":"Cabinet Dupont & Associés"},"company":{"name":"PME 17 SALARIES","siren":"494185325"},"dispositif":["Abondement","Intéressement"],"dossierId":"81c56f91-f0da-4f44-a6ca-ea069071b6a3","dossierReference":"Timi-42","transmission":{"status":"SENT","transmittedAt":"2026-09-24T10:32:06.782Z"}},{"accountingFirm":{"name":"Cabinet Dupont & Associés"},"company":{"name":"HOLDING FAMILIALE","siren":"793994252"},"dispositif":["Participation","Abondement"],"dossierId":"f2e0077f-59e3-4adf-bb6f-115b14a93e95","dossierReference":"Timi-41","transmission":{"status":"SUBSCRIBED","transmittedAt":"2026-09-17T14:05:41.000Z"}}]}},"DossierSummary":{"type":"object","properties":{"dossierId":{"type":"string","description":"Timi dossier id, the `{dossierId}` of the other endpoints."},"dossierReference":{"type":"string","description":"The reference printed on the Timi documents and screens (« Timi-42 » today). Display only: an opaque label whose format may change; `dossierId` is the key."},"company":{"type":"object","properties":{"name":{"type":"string","description":"Raison sociale."},"siren":{"nullable":true,"description":"SIREN, when known.","type":"string"}},"required":["name","siren"],"additionalProperties":false},"dispositif":{"description":"The mechanisms recommended: Intéressement, Participation, Abondement, PPV.","type":"array","items":{"nullable":true,"type":"string"}},"transmission":{"$ref":"#/components/schemas/Transmission"},"accountingFirm":{"$ref":"#/components/schemas/AccountingFirm"}},"required":["dossierId","dossierReference","company","dispositif","transmission","accountingFirm"],"additionalProperties":false,"example":{"accountingFirm":{"name":"Cabinet Dupont & Associés"},"company":{"name":"PME 17 SALARIES","siren":"494185325"},"dispositif":["Abondement","Intéressement"],"dossierId":"81c56f91-f0da-4f44-a6ca-ea069071b6a3","dossierReference":"Timi-42","transmission":{"status":"SENT","transmittedAt":"2026-09-24T10:32:06.782Z"}}},"Error":{"type":"object","properties":{"error":{"type":"string","description":"Neutral English, for developers. May be reworded."},"code":{"description":"Stable, machine-readable reason. Never reworded.","type":"string"},"fields":{"description":"On INVALID_INPUT: the invalid parts of the request, each with a message key.","type":"object","additionalProperties":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"}]}}},"requestId":{"type":"string","description":"Also in the X-Request-Id header; quote it to Timi support."}},"required":["error","requestId"],"additionalProperties":false,"example":{"code":"PROJECT_NOT_TRANSMITTED","error":"Project not transmitted to this partner","requestId":"9548ce0a-a645-4b59-9f89-d3e78f8064e1"}},"Me":{"type":"object","properties":{"email":{"type":"string","description":"The verified e-mail of the token, which is how the CGP is matched."},"partners":{"type":"array","items":{"type":"object","properties":{"partnerId":{"type":"string","description":"The CGP’s record in one accounting firm’s partner directory."},"cabinetName":{"type":"string"},"type":{"type":"string","enum":["CGP","COURTIER"]},"eresPartnerCode":{"type":"string"},"accountingFirm":{"$ref":"#/components/schemas/AccountingFirm"}},"required":["partnerId","cabinetName","type","eresPartnerCode","accountingFirm"],"additionalProperties":false},"description":"One entry per accounting firm that registered the CGP."}},"required":["email","partners"],"additionalProperties":false,"example":{"email":"jean.martin@cabinet-martin.fr","partners":[{"accountingFirm":{"name":"Cabinet Dupont & Associés"},"cabinetName":"Cabinet Martin Patrimoine","eresPartnerCode":"ERES-00421","partnerId":"22222222-3333-4444-8555-666666666666","type":"CGP"}]}},"Mechanism":{"type":"object","properties":{"dispositif":{"type":"string","description":"Intéressement, Participation, Abondement or PPV."},"duration":{"nullable":true,"description":"Accord duration, when the mechanism has one.","type":"object","properties":{"years":{"nullable":true,"type":"number"},"renewable":{"type":"boolean"}},"required":["years","renewable"],"additionalProperties":false},"participationFormula":{"nullable":true,"description":"Participation formula (légale or dérogatoire), as a label.","type":"string"},"objective":{"nullable":true,"description":"Intéressement objective, as a label.","type":"string"},"distribution":{"nullable":true,"description":"How the prime is split between beneficiaries (salaire, temps de présence, combinaison).","type":"string"},"paymentFrequency":{"nullable":true,"description":"Payment frequency, as a label.","type":"string"},"targetAmount":{"nullable":true,"description":"Target amount of the prime, as a label.","type":"string"}},"required":["dispositif","duration","participationFormula","objective","distribution","paymentFrequency","targetAmount"],"additionalProperties":false,"example":{"dispositif":"Intéressement","distribution":"Salaire","duration":{"renewable":false,"years":3},"objective":"À déterminer ensemble en prochaine étape : par exemple objectif financier et / ou opérationnel","participationFormula":null,"paymentFrequency":"Annuelle","targetAmount":"Entre 2.0% et 4.0% de la masse salariale, soit entre 1 143 € et 2 286 € en moyenne par bénéficiaire"}},"PlanAbondement":{"type":"object","properties":{"rate":{"description":"Abondement rate, in percent (300 = 300 %).","nullable":true,"type":"number"},"plafond":{"$ref":"#/components/schemas/PlanCeiling"},"matchableDeposits":{"description":"Which deposits the abondement matches (« versements abondés »).","type":"array","items":{"nullable":true,"type":"string"}}},"required":["rate","plafond","matchableDeposits"],"additionalProperties":false,"example":{"matchableDeposits":["Versements volontaires","Intéressement"],"plafond":{"seniority_tiers":{"1_a_3_ans":1500,"3_a_5_ans":2100,"moins_de_1_an":900,"plus_de_5_ans":2700}},"rate":300}},"PlanCeiling":{"description":"Abondement ceiling: a flat amount, or a grid by seniority.","nullable":true,"anyOf":[{"type":"number","description":"A flat ceiling, in euros per year."},{"type":"object","properties":{"seniority_tiers":{"type":"object","properties":{"moins_de_1_an":{"nullable":true,"type":"number"},"1_a_3_ans":{"nullable":true,"type":"number"},"3_a_5_ans":{"nullable":true,"type":"number"},"plus_de_5_ans":{"nullable":true,"type":"number"}},"required":["moins_de_1_an","1_a_3_ans","3_a_5_ans","plus_de_5_ans"],"additionalProperties":false}},"required":["seniority_tiers"],"additionalProperties":false,"description":"A ceiling per seniority band, in euros per year."}],"example":{"seniority_tiers":{"1_a_3_ans":1500,"3_a_5_ans":2100,"moins_de_1_an":900,"plus_de_5_ans":2700}}},"PlanSummary":{"type":"object","properties":{"key":{"type":"string","description":"PEI or PERECOI."},"opened":{"type":"boolean","description":"Whether the company wants this plan opened."},"abondement":{"nullable":true,"description":"Abondement terms; null when the plan is opened without abondement, or not opened.","allOf":[{"$ref":"#/components/schemas/PlanAbondement"}]}},"required":["key","opened","abondement"],"additionalProperties":false,"example":{"abondement":{"matchableDeposits":["Versements volontaires","Intéressement"],"plafond":{"seniority_tiers":{"1_a_3_ans":1500,"3_a_5_ans":2100,"moins_de_1_an":900,"plus_de_5_ans":2700}},"rate":300},"key":"PEI","opened":true}},"Recommendation":{"type":"object","properties":{"dispositif":{"description":"The mechanisms recommended.","type":"array","items":{"nullable":true,"type":"string"}},"plans":{"description":"Long labels of the plans to open.","type":"array","items":{"nullable":true,"type":"string"}},"planSummaries":{"type":"array","items":{"$ref":"#/components/schemas/PlanSummary"},"description":"One entry per plan (PEI, PERECOI), opened or not."},"mechanisms":{"type":"array","items":{"$ref":"#/components/schemas/Mechanism"},"description":"The terms of each recommended mechanism."},"headcount":{"nullable":true,"description":"Headcount the recommendation was computed on.","type":"number"}},"required":["dispositif","plans","planSummaries","mechanisms","headcount"],"additionalProperties":false,"example":{"dispositif":["Abondement","Intéressement"],"headcount":17,"mechanisms":[{"dispositif":"Abondement","distribution":null,"duration":{"renewable":true,"years":1},"objective":null,"participationFormula":null,"paymentFrequency":null,"targetAmount":"2 029 € en moyenne par bénéficiaire, soit 3.6% de la masse salariale"},{"dispositif":"Intéressement","distribution":"Salaire","duration":{"renewable":false,"years":3},"objective":"À déterminer ensemble en prochaine étape : par exemple objectif financier et / ou opérationnel","participationFormula":null,"paymentFrequency":"Annuelle","targetAmount":"Entre 2.0% et 4.0% de la masse salariale, soit entre 1 143 € et 2 286 € en moyenne par bénéficiaire"}],"planSummaries":[{"abondement":{"matchableDeposits":["Versements volontaires","Intéressement"],"plafond":{"seniority_tiers":{"1_a_3_ans":1500,"3_a_5_ans":2100,"moins_de_1_an":900,"plus_de_5_ans":2700}},"rate":300},"key":"PEI","opened":true},{"abondement":null,"key":"PERECOI","opened":true}],"plans":["Plan Epargne Interentreprise (PEI)","Plan d’Épargne Retraite d’Entreprise Collectif Interentreprise (PERECOI)"]}},"ReportableStatus":{"type":"string","enum":["OPENED","SUBSCRIBED","SIGNED","ACTIVE","CANCELLED"],"description":"A status Eres may report. SENT belongs to the accounting firm and cannot be reported.","example":"SUBSCRIBED"},"StatusUpdate":{"type":"object","properties":{"dossierId":{"type":"string"},"status":{"$ref":"#/components/schemas/TransmissionStatus"},"previousStatus":{"$ref":"#/components/schemas/TransmissionStatus"},"changed":{"type":"boolean","description":"False when the report was already reflected (idempotent replay, or a step already passed)."}},"required":["dossierId","status","previousStatus","changed"],"additionalProperties":false,"example":{"changed":true,"dossierId":"81c56f91-f0da-4f44-a6ca-ea069071b6a3","previousStatus":"OPENED","status":"SUBSCRIBED"}},"Transmission":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/TransmissionStatus"},"transmittedAt":{"type":"string","description":"When the accounting firm transmitted the dossier to the CGP.","format":"date-time"}},"required":["status","transmittedAt"],"additionalProperties":false,"example":{"status":"OPENED","transmittedAt":"2026-09-24T10:32:06.782Z"}},"TransmissionStatus":{"type":"string","enum":["SENT","OPENED","SUBSCRIBED","SIGNED","ACTIVE","CANCELLED"],"description":"Where the dossier stands with the CGP: SENT (transmitted by the accounting firm), OPENED (opened by the CGP), SUBSCRIBED (Eres subscription started), SIGNED (plans signed by the company), ACTIVE (plans in force at Eres), CANCELLED (subscription abandoned or refused; terminal).","example":"OPENED"}}}}