API GraphQL
API GraphQL
Vue d'ensemble de l'API GraphQL etouch - endpoint, queries, mutations et subscriptions
L'API etouch est construite avec GraphQL Yoga sur Hono, exposant un schema GraphQL complet de 1816 lignes.
| |
|---|
| URL | POST /graphql |
| GraphiQL | GET /graphql (dev uniquement) |
| Port | 4000 (dev) |
| Query | Arguments | Description |
|---|
viewer | -- | Utilisateur courant + contexte organisation active |
node(id) | id: ID! | Recuperer un GuidelineFile par ID |
globalSearch(input) | query, limit, types | Recherche globale (projets, clients, retoucheurs, assets, guidelines, users) |
| Query | Arguments | Description |
|---|
projects(input) | PaginationInput | Liste paginee des projets |
project(id) | id: ID! | Detail d'un projet |
projectWorkflowSummary(projectId) | projectId: ID! | Resume workflow d'un projet |
publicProject(token) | token: String! | Projet public via token |
projectExtraFormats(projectId) | projectId: ID! | Formats supplementaires d'un projet |
| Query | Arguments | Description |
|---|
assets(projectId, input) | projectId: ID!, PaginationInput | Assets d'un projet |
retoucherAssets(projectId, input) | projectId: ID!, PaginationInput | Assets pour retoucheurs |
clientReviewAssets(projectId, input) | projectId: ID!, PaginationInput | Assets en revue client |
| Query | Arguments | Description |
|---|
organization(id) | id: ID! | Detail d'une organisation |
organizations(input) | PaginationInput | Liste des organisations |
organizationChildren(parentId, type, input) | parentId: ID!, type?, PaginationInput | Organisations enfants |
user(id) | id: ID! | Detail d'un utilisateur |
users(input) | PaginationInput | Liste des utilisateurs |
organizationUsers(organizationId) | organizationId: ID! | Utilisateurs d'une organisation (admin) |
studioClients(studioId, input) | studioId: ID!, PaginationInput | Clients d'un studio |
clientStudios(clientId, input) | clientId: ID!, PaginationInput | Studios d'un client |
invitation(token) | token: String! | Info d'invitation |
| Query | Arguments | Description |
|---|
guidelineFiles(organizationId, input) | organizationId: ID!, PaginationInput | Guidelines d'une organisation |
retouchCategories(organizationId, onlyActive) | organizationId: ID!, onlyActive? | Categories de retouche |
retouchRounds(projectId, input) | projectId: ID!, PaginationInput | Rounds de retouche |
retouchVersions(roundId, input) | roundId: ID!, PaginationInput | Versions de retouche |
| Query | Arguments | Description |
|---|
priceLists(organizationId, input) | organizationId: ID!, PaginationInput | Listes de prix |
clientPricing(studioId, clientId) | studioId: ID!, clientId: ID! | Tarifs client |
studioRetouchingCategoryPrices(studioId) | studioId: ID! | Prix par categorie de retouche |
guidelinePricingCategories(guidelineId) | guidelineId: ID! | Categories de prix d'une guideline |
guidelineOrganizationPrices(guidelineId, organizationId) | guidelineId: ID!, organizationId? | Prix par organisation |
| Query | Arguments | Description |
|---|
invoices(organizationId, input) | organizationId: ID!, PaginationInput | Factures |
downloadHistory(projectId, clientId, from, to, input) | filtres optionnels | Historique des telechargements |
| Query | Arguments | Description |
|---|
integrations(organizationId) | organizationId? | Integrations disponibles |
listFtpFiles(input) | ListFtpFilesInput | Lister les fichiers FTP |
pennyLaneCustomers(input) | PennyLaneCustomersInput | Clients Pennylane |
importJob(id) | id: ID! | Detail d'un job d'import |
importJobs(organizationId, input) | organizationId: ID!, PaginationInput | Jobs d'import |
ftpSyncJobs(projectId) | projectId: ID! | Jobs de synchronisation FTP |
ftpSyncJob(id) | id: ID! | Detail d'un job FTP |
| Query | Arguments | Description |
|---|
workflowStates | -- | Liste des etats de workflow |
notifications(input) | PaginationInput | Notifications |
feedback(input) | PaginationInput | Feedbacks |
dashboardOverview(input) | DashboardOverviewInput | Statistiques du dashboard |
searchCompanies(query, limit) | query: String!, limit? | Recherche d'entreprises (INSEE) |
searchCompanyAddresses(query, limit) | query: String!, limit? | Recherche d'adresses |
| Mutation | Input | Description |
|---|
createProject | CreateProjectInput | Creer un projet |
updateProject | UpdateProjectInput | Modifier un projet |
deleteProject(id) | id: ID! | Supprimer un projet |
deleteProjects(ids) | ids: [ID!]! | Supprimer des projets |
transitionProject | TransitionProjectInput | Transiter le workflow |
unarchiveProject(id) | id: ID! | Desarchiver un projet |
toggleProjectPublicSharing | projectId, enabled | Partage public |
| Mutation | Input | Description |
|---|
createUploadSession | CreateUploadSessionInput | Session d'upload |
finalizeAssetUpload | FinalizeAssetUploadInput | Finaliser un upload |
setAssetSelection | SetAssetSelectionInput | Selectionner un asset |
setAssetClientValidation | SetAssetClientValidationInput | Validation client d'un asset |
setProjectClientValidation | SetProjectClientValidationInput | Validation client en masse |
updateAssetSku | UpdateAssetSkuInput | Modifier le SKU |
updateAssetExtraFormat | UpdateAssetExtraFormatInput | Format supplementaire |
toggleAssetPriority | ToggleAssetPriorityInput | Basculer la priorite |
requestHighEndRetouch | RequestHighEndRetouchInput | Demander une retouche high-end |
deleteAsset | DeleteAssetInput | Supprimer un asset |
| Mutation | Input | Description |
|---|
createOrganization | CreateOrganizationInput | Creer une organisation |
updateOrganization | UpdateOrganizationInput | Modifier une organisation |
deleteOrganization(id) | id: ID! | Supprimer une organisation |
deleteOrganizations(ids) | ids: [ID!]! | Suppression en masse |
createStudioClient | CreateStudioClientInput | Lier studio-client |
updateStudioClient | UpdateStudioClientInput | Modifier la liaison |
deleteStudioClient(id) | id: ID! | Supprimer la liaison |
setActiveOrganization | SetActiveOrganizationInput | Changer d'organisation active |
| Mutation | Input | Description |
|---|
createUser | CreateUserInput | Creer un utilisateur |
updateUser | UpdateUserInput | Modifier un utilisateur |
deleteUsers(ids) | ids: [ID!]! | Supprimer des utilisateurs |
updateUserProfile | UpdateUserProfileInput | Modifier son profil |
resendUserInvitation | userId, organizationId | Renvoyer une invitation |
resendOrganizationInvitation | organizationId | Renvoyer invitation org |
acceptInvitation | AcceptInvitationInput | Accepter une invitation |
acceptInvitationForLoggedInUser | AcceptInvitationForLoggedInUserInput | Accepter (utilisateur connecte) |
| Mutation | Input | Description |
|---|
createGuideline | CreateGuidelineInput | Creer une guideline |
updateGuideline | UpdateGuidelineInput | Modifier une guideline |
deleteGuideline(id) | id: ID! | Supprimer une guideline |
setProjectGuidelines | SetProjectGuidelinesInput | Assigner des guidelines |
setProjectRetouchers | SetProjectRetouchersInput | Assigner des retoucheurs |
createRetouchCategory | CreateRetouchCategoryInput | Creer une categorie |
updateRetouchCategory | UpdateRetouchCategoryInput | Modifier une categorie |
deleteRetouchCategory(id) | id: ID! | Supprimer une categorie |
archiveRetouchCategory(id) | id: ID! | Archiver une categorie |
startRetouchRound | StartRetouchRoundInput | Demarrer un round |
completeRetouchRound | id, status?, completedAt? | Terminer un round |
createRetouchVersion | CreateRetouchVersionInput | Creer une version retouche |
updateRetouchVersion | UpdateRetouchVersionInput | Modifier une version |
| Mutation | Input | Description |
|---|
updateProjectPricing | projectId, items | Modifier la tarification projet |
publishProjectQuote(projectId) | projectId: ID! | Publier un devis |
createPriceList | CreatePriceListInput | Creer une liste de prix |
updatePriceList | UpdatePriceListInput | Modifier une liste de prix |
setPriceListDefault | id, isDefault | Definir par defaut |
upsertRetouchPrice | RetouchPriceInput | Upsert prix retouche |
removeRetouchPrice(id) | id: ID! | Supprimer un prix |
upsertClientPricing | UpsertClientPricingInput | Upsert tarif client |
deleteClientPricing(id) | id: ID! | Supprimer un tarif |
upsertStudioRetouchingCategoryPrice | UpsertStudioRetouchingCategoryPriceInput | Prix par categorie studio |
upsertGuidelinePricingCategory | UpsertGuidelinePricingCategoryInput | Categorie prix guideline |
upsertGuidelineOrganizationPrice | UpsertGuidelineOrganizationPriceInput | Prix org guideline |
deleteGuidelineOrganizationPrice(id) | id: ID! | Supprimer prix org |
syncGuidelinePricingFromViews | guidelineId: ID! | Sync prix depuis vues |
autoPopulateProjectPricingFromViews | projectId: ID! | Auto-remplir prix projet |
| Mutation | Input | Description |
|---|
createAvatarUploadSession | CreateAvatarUploadInput | Upload avatar |
createInvitationAvatarUploadSession | CreateInvitationAvatarUploadInput | Upload avatar invitation |
createGuidelineUploadSession | CreateGuidelineUploadInput | Upload guideline |
createReferenceImageUploadSession | CreateReferenceImageUploadInput | Upload image de reference |
createRetouchUploadSession | CreateRetouchUploadInput | Upload retouche |
| Mutation | Input | Description |
|---|
connectIntegration | ConnectIntegrationInput | Connecter une integration |
disconnectIntegration | DisconnectIntegrationInput | Deconnecter |
testIntegration | TestIntegrationInput | Tester une integration |
importPennyLaneClients | ImportPennyLaneClientsInput | Importer clients Pennylane |
startPennyLaneImport | StartPennyLaneImportInput | Demarrer import Pennylane |
cancelImportJob(id) | id: ID! | Annuler un import |
importFtpFolder | ImportFtpFolderInput | Importer dossier FTP |
startFtpSync | StartFtpSyncInput | Demarrer sync FTP |
| Mutation | Input | Description |
|---|
createComment | CreateCommentInput | Creer un commentaire |
updateComment | id, UpdateCommentInput | Modifier un commentaire |
deleteComment(id) | id: ID! | Supprimer un commentaire |
acknowledgeNotification(id) | id: ID! | Acquitter une notification |
requestDownloadAccess | RequestDownloadAccessInput | Demander l'acces telechargement |
recordFeedback | FeedbackInput | Enregistrer un feedback |
updateNotificationPreferences | UpdateNotificationPreferencesInput | Preferences notifications |
impersonateUser(userId) | userId: ID! | Usurper un utilisateur (admin) |
stopImpersonating | -- | Arreter l'usurpation |
trackDownload | TrackDownloadInput | Suivre un telechargement |
| Subscription | Arguments | Description |
|---|
workflowUpdated(projectId) | projectId: ID! | Changement d'etat workflow en temps reel |
assetVersionCreated(projectId) | projectId: ID! | Nouvel upload d'asset/retouche |
notificationReceived | -- | Flux de notifications in-app |
Toutes les listes paginées utilisent PaginationInput :
input PaginationInput {
after: String # Cursor pour la page suivante
first: Int = 20 # Nombre d'éléments par page
filter: JSON # Filtres additionnels
}
Les réponses contiennent un PageInfo :
type PageInfo {
endCursor: String
hasNextPage: Boolean!
totalCount: Int!
}