etouch docs
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.

Endpoint

URLPOST /graphql
GraphiQLGET /graphql (dev uniquement)
Port4000 (dev)

Queries

Core

QueryArgumentsDescription
viewer--Utilisateur courant + contexte organisation active
node(id)id: ID!Recuperer un GuidelineFile par ID
globalSearch(input)query, limit, typesRecherche globale (projets, clients, retoucheurs, assets, guidelines, users)

Projets

QueryArgumentsDescription
projects(input)PaginationInputListe 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

Assets

QueryArgumentsDescription
assets(projectId, input)projectId: ID!, PaginationInputAssets d'un projet
retoucherAssets(projectId, input)projectId: ID!, PaginationInputAssets pour retoucheurs
clientReviewAssets(projectId, input)projectId: ID!, PaginationInputAssets en revue client

Organisations et utilisateurs

QueryArgumentsDescription
organization(id)id: ID!Detail d'une organisation
organizations(input)PaginationInputListe des organisations
organizationChildren(parentId, type, input)parentId: ID!, type?, PaginationInputOrganisations enfants
user(id)id: ID!Detail d'un utilisateur
users(input)PaginationInputListe des utilisateurs
organizationUsers(organizationId)organizationId: ID!Utilisateurs d'une organisation (admin)
studioClients(studioId, input)studioId: ID!, PaginationInputClients d'un studio
clientStudios(clientId, input)clientId: ID!, PaginationInputStudios d'un client
invitation(token)token: String!Info d'invitation

Guidelines et retouche

QueryArgumentsDescription
guidelineFiles(organizationId, input)organizationId: ID!, PaginationInputGuidelines d'une organisation
retouchCategories(organizationId, onlyActive)organizationId: ID!, onlyActive?Categories de retouche
retouchRounds(projectId, input)projectId: ID!, PaginationInputRounds de retouche
retouchVersions(roundId, input)roundId: ID!, PaginationInputVersions de retouche

Tarification

QueryArgumentsDescription
priceLists(organizationId, input)organizationId: ID!, PaginationInputListes 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

Facturation

QueryArgumentsDescription
invoices(organizationId, input)organizationId: ID!, PaginationInputFactures
downloadHistory(projectId, clientId, from, to, input)filtres optionnelsHistorique des telechargements

Integrations

QueryArgumentsDescription
integrations(organizationId)organizationId?Integrations disponibles
listFtpFiles(input)ListFtpFilesInputLister les fichiers FTP
pennyLaneCustomers(input)PennyLaneCustomersInputClients Pennylane
importJob(id)id: ID!Detail d'un job d'import
importJobs(organizationId, input)organizationId: ID!, PaginationInputJobs d'import
ftpSyncJobs(projectId)projectId: ID!Jobs de synchronisation FTP
ftpSyncJob(id)id: ID!Detail d'un job FTP

Divers

QueryArgumentsDescription
workflowStates--Liste des etats de workflow
notifications(input)PaginationInputNotifications
feedback(input)PaginationInputFeedbacks
dashboardOverview(input)DashboardOverviewInputStatistiques du dashboard
searchCompanies(query, limit)query: String!, limit?Recherche d'entreprises (INSEE)
searchCompanyAddresses(query, limit)query: String!, limit?Recherche d'adresses

Mutations

Projets

MutationInputDescription
createProjectCreateProjectInputCreer un projet
updateProjectUpdateProjectInputModifier un projet
deleteProject(id)id: ID!Supprimer un projet
deleteProjects(ids)ids: [ID!]!Supprimer des projets
transitionProjectTransitionProjectInputTransiter le workflow
unarchiveProject(id)id: ID!Desarchiver un projet
toggleProjectPublicSharingprojectId, enabledPartage public

Assets

MutationInputDescription
createUploadSessionCreateUploadSessionInputSession d'upload
finalizeAssetUploadFinalizeAssetUploadInputFinaliser un upload
setAssetSelectionSetAssetSelectionInputSelectionner un asset
setAssetClientValidationSetAssetClientValidationInputValidation client d'un asset
setProjectClientValidationSetProjectClientValidationInputValidation client en masse
updateAssetSkuUpdateAssetSkuInputModifier le SKU
updateAssetExtraFormatUpdateAssetExtraFormatInputFormat supplementaire
toggleAssetPriorityToggleAssetPriorityInputBasculer la priorite
requestHighEndRetouchRequestHighEndRetouchInputDemander une retouche high-end
deleteAssetDeleteAssetInputSupprimer un asset

Organisations

MutationInputDescription
createOrganizationCreateOrganizationInputCreer une organisation
updateOrganizationUpdateOrganizationInputModifier une organisation
deleteOrganization(id)id: ID!Supprimer une organisation
deleteOrganizations(ids)ids: [ID!]!Suppression en masse
createStudioClientCreateStudioClientInputLier studio-client
updateStudioClientUpdateStudioClientInputModifier la liaison
deleteStudioClient(id)id: ID!Supprimer la liaison
setActiveOrganizationSetActiveOrganizationInputChanger d'organisation active

Utilisateurs

MutationInputDescription
createUserCreateUserInputCreer un utilisateur
updateUserUpdateUserInputModifier un utilisateur
deleteUsers(ids)ids: [ID!]!Supprimer des utilisateurs
updateUserProfileUpdateUserProfileInputModifier son profil
resendUserInvitationuserId, organizationIdRenvoyer une invitation
resendOrganizationInvitationorganizationIdRenvoyer invitation org
acceptInvitationAcceptInvitationInputAccepter une invitation
acceptInvitationForLoggedInUserAcceptInvitationForLoggedInUserInputAccepter (utilisateur connecte)

Guidelines et retouche

MutationInputDescription
createGuidelineCreateGuidelineInputCreer une guideline
updateGuidelineUpdateGuidelineInputModifier une guideline
deleteGuideline(id)id: ID!Supprimer une guideline
setProjectGuidelinesSetProjectGuidelinesInputAssigner des guidelines
setProjectRetouchersSetProjectRetouchersInputAssigner des retoucheurs
createRetouchCategoryCreateRetouchCategoryInputCreer une categorie
updateRetouchCategoryUpdateRetouchCategoryInputModifier une categorie
deleteRetouchCategory(id)id: ID!Supprimer une categorie
archiveRetouchCategory(id)id: ID!Archiver une categorie
startRetouchRoundStartRetouchRoundInputDemarrer un round
completeRetouchRoundid, status?, completedAt?Terminer un round
createRetouchVersionCreateRetouchVersionInputCreer une version retouche
updateRetouchVersionUpdateRetouchVersionInputModifier une version

Tarification

MutationInputDescription
updateProjectPricingprojectId, itemsModifier la tarification projet
publishProjectQuote(projectId)projectId: ID!Publier un devis
createPriceListCreatePriceListInputCreer une liste de prix
updatePriceListUpdatePriceListInputModifier une liste de prix
setPriceListDefaultid, isDefaultDefinir par defaut
upsertRetouchPriceRetouchPriceInputUpsert prix retouche
removeRetouchPrice(id)id: ID!Supprimer un prix
upsertClientPricingUpsertClientPricingInputUpsert tarif client
deleteClientPricing(id)id: ID!Supprimer un tarif
upsertStudioRetouchingCategoryPriceUpsertStudioRetouchingCategoryPriceInputPrix par categorie studio
upsertGuidelinePricingCategoryUpsertGuidelinePricingCategoryInputCategorie prix guideline
upsertGuidelineOrganizationPriceUpsertGuidelineOrganizationPriceInputPrix org guideline
deleteGuidelineOrganizationPrice(id)id: ID!Supprimer prix org
syncGuidelinePricingFromViewsguidelineId: ID!Sync prix depuis vues
autoPopulateProjectPricingFromViewsprojectId: ID!Auto-remplir prix projet

Uploads

MutationInputDescription
createAvatarUploadSessionCreateAvatarUploadInputUpload avatar
createInvitationAvatarUploadSessionCreateInvitationAvatarUploadInputUpload avatar invitation
createGuidelineUploadSessionCreateGuidelineUploadInputUpload guideline
createReferenceImageUploadSessionCreateReferenceImageUploadInputUpload image de reference
createRetouchUploadSessionCreateRetouchUploadInputUpload retouche

Integrations

MutationInputDescription
connectIntegrationConnectIntegrationInputConnecter une integration
disconnectIntegrationDisconnectIntegrationInputDeconnecter
testIntegrationTestIntegrationInputTester une integration
importPennyLaneClientsImportPennyLaneClientsInputImporter clients Pennylane
startPennyLaneImportStartPennyLaneImportInputDemarrer import Pennylane
cancelImportJob(id)id: ID!Annuler un import
importFtpFolderImportFtpFolderInputImporter dossier FTP
startFtpSyncStartFtpSyncInputDemarrer sync FTP

Divers

MutationInputDescription
createCommentCreateCommentInputCreer un commentaire
updateCommentid, UpdateCommentInputModifier un commentaire
deleteComment(id)id: ID!Supprimer un commentaire
acknowledgeNotification(id)id: ID!Acquitter une notification
requestDownloadAccessRequestDownloadAccessInputDemander l'acces telechargement
recordFeedbackFeedbackInputEnregistrer un feedback
updateNotificationPreferencesUpdateNotificationPreferencesInputPreferences notifications
impersonateUser(userId)userId: ID!Usurper un utilisateur (admin)
stopImpersonating--Arreter l'usurpation
trackDownloadTrackDownloadInputSuivre un telechargement

Subscriptions

SubscriptionArgumentsDescription
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

Pagination

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!
}