Riferimento API dei Progetti
Crea, recupera, aggiorna, elimina e gestisci la membership dei tuoi progetti Axe Developer Hub in modo programmato utilizzando l'API REST
L'API Progetti ti consente di gestire i progetti Axe Developer Hub e la loro membership in modo programmato, utilizzando la stessa chiave API Axe Account che già usi per il resto delle API REST di Axe Developer Hub. Non ci sono credenziali separate per la gestione dei progetti. Per un'introduzione passo dopo passo, consulta Inizia con l'automazione della gestione dei progetti.
Se hai solo bisogno di scoprire l'ID di un progetto dal suo nome per poter chiamare API di Sessioni e Risultati, consulta Elenco di progetti di seguito. Se conosci già il tuo ID progetto, puoi trovarlo in Axe Developer Hub e chiamare direttamente l'API di Sessioni e Risultati.
Autenticazione
Tutte le richieste richiedono una chiave API. Forniscila utilizzando l'intestazione X-API-Key:
X-API-Key: <DEQUE_API_KEY>Trova la tua chiave API nel Portale Account Axe. Scegli una chiave API Axe Developer Hub per progetti web o CI/CD. Scegli una chiave API Axe DevTools Mobile per progetti mobile.
Tratta la tua chiave API come un segreto: conservala in una variabile d'ambiente o nel deposito segreti della tua piattaforma CI/CD invece di codificarla direttamente nelle tue richieste.
Controllo degli accessi e permessi
- Creazione di un progetto richiede un abbonamento attivo (licenza) per il tipo di progetto. Chiunque crei un progetto diventa automaticamente il suo amministratore.
- Ruoli del progetto sono amministratore e membro. Un amministratore di progetto può aggiornare o eliminare il progetto e gestire la sua membership. Un membro del progetto può accedere al progetto ma non gestirlo o gestire la sua membership.
- Amministratori dell'Org può vedere e gestire ogni progetto dei tipi con licenza della loro organizzazione, indipendentemente dalla loro membership nei progetti. Non hanno bisogno di una licenza personale per visualizzare, aggiornare, eliminare o gestire i membri di un progetto esistente. Creare un progetto è l'unica eccezione: richiede sempre una licenza attiva, sia che il chiamante sia un amministratore dell'organizzazione o meno.
- Aggiungere un membro a un progetto non richiede che quel membro detenga una licenza. L'API li registra immediatamente come membri del progetto, ma non possono accedere al progetto finché non possiedono una licenza. L'utente target deve già appartenere all'organizzazione. Non è possibile aggiungere qualcuno che non sia già membro dell'organizzazione.
- L'eliminazione di un progetto è definitiva. Non esiste un ripristino self-service per un progetto eliminato.
- In ogni caso, la risposta è limitata al prodotto della chiave API. Una chiave API Axe Developer Hub restituisce e gestisce solo progetti Axe Developer Hub (web). Una chiave API Axe DevTools Mobile restituisce e gestisce solo progetti Axe DevTools Mobile.
Una abbonamento inattivo restituisce 401 Unauthorized.
Valori di configurazione del tipo di progetto
Ogni progetto ha un selected_project_type, e ogni tipo accetta solo un set specifico e fisso di valori di test_language / test_platform:
selected_project_type |
Famiglia di prodotti | Valido test_language |
Valido test_platform |
|---|---|---|---|
axe-devtools-watcher |
Web | javascript, typescript |
Cypress, Cypress Component, WebDriverJS, Playwright, Playwright Test, Puppeteer, WebdriverIO, WebdriverIO Testrunner |
axe-devtools-watcher |
Web | java |
Selenium WebDriver, Playwright |
axe-devtools-html |
Web | null (obbligatorio) |
null (obbligatorio) |
axe-devtools-mobile |
Mobile | null (obbligatorio) |
Appium, Espresso, UI Automator, XCUITest |
Il selected_project_type di un progetto è fissato quando il progetto viene creato. Per utilizzare un tipo diverso, crea un nuovo progetto.
Elenco di progetti
Restituisce l'elenco dei progetti a cui la chiave API autenticata può accedere.
Richiesta
- Endpoint:
GET https://axe.deque.com/api-pub/v1/results/projects - Intestazioni (obbligatorie):
X-API-Key: <DEQUE_API_KEY>Accept: application/json
Parametri di Query
Tutti i parametri di query sono opzionali.
| Parametro | Descrizione |
|---|---|
project_types |
Elenco separato da virgola dei tipi di progetto da restituire, per esempio axe-devtools-watcher,axe-devtools-html. Accetta anche gli alias web e mobile, che si espandono nei tipi concreti per quel prodotto: web restituisce progetti axe-devtools-watcher e axe-devtools-html, e mobile restituisce progetti axe-devtools-mobile (progetti Axe DevTools Mobile SDK e Appium). Se ometti questo parametro, la risposta restituisce ogni tipo di progetto a cui la tua chiave API può accedere. |
page_size |
Numero di progetti da restituire per pagina. Predefinito: 30. Massimo: 100. Valori al di sopra del massimo sono limitati a 100. Vedi Paginazione con Cursore. |
after |
Valore del cursore dalla risposta precedente, usato per recuperare la pagina successiva. Vedi Paginazione con Cursore. |
Corpo della Risposta
Una risposta di successo restituisce un array JSON di oggetti progetto. Ogni oggetto progetto include i seguenti campi:
| Campo | Tipo | Descrizione |
|---|---|---|
project_id |
Stringa | Identificatore univoco per il progetto. Quando chiami questa API o endpoint delle Sessioni, usa questo valore come {project_id}. |
name |
Stringa | Il nome visualizzato del progetto. |
selected_project_type |
Stringa | Il tipo del progetto, per esempio axe-devtools-watcher o axe-devtools-html. Consulta Valori di configurazione del tipo di progetto. |
test_language |
Stringa | Il linguaggio di test del progetto. Per i tipi di progetto che non usano un linguaggio di test, questo è null. Consulta Valori di configurazione del tipo di progetto. |
test_platform |
Stringa | La piattaforma di test del progetto. Per i tipi di progetto che non usano una piattaforma di test, questo è null. Consulta Valori di configurazione del tipo di progetto. Leggi test_language e test_platform prima di aggiornare un progetto: l'aggiornamento convalida la coppia dopo aver fuso le tue modifiche con questi valori memorizzati. |
role |
Stringa | Il tuo ruolo nel progetto: admin, o contributor per un membro del progetto. Se sei un amministratore dell'organizzazione che non è un membro del progetto, questo è null. |
user_id |
Stringa | Il tuo ID utente, quando role è impostato. Se role è null, questo è null. |
enterprise_id |
Stringa | ID dell'organizzazione che possiede il progetto. Se il progetto non appartiene a un'organizzazione, questo è null. |
is_enterprise_project |
Booleano | Se il progetto appartiene a un'organizzazione, cioè se enterprise_id è impostato. |
created_at |
Stringa | Timestamp ISO 8601 UTC per il momento di creazione del progetto. |
updated_at |
Stringa | Timestamp ISO 8601 UTC per l'ultimo aggiornamento del progetto. Se il progetto non è mai stato aggiornato, questo è null. |
run_by |
Stringa | Nome dell'utente la cui chiave API ha eseguito la sessione più recente del progetto. Se il progetto non ha sessioni o l'utente non può essere risolto (per esempio, la chiave API è stata eliminata), questo è null. |
last_session_created_at |
Stringa | Timestamp ISO 8601 UTC della sessione più recente del progetto. Se il progetto non ha sessioni, questo è null. |
has_git_information |
Booleano | Se il progetto ha metadati Git allegati. |
git_url |
Stringa | URL del repository Git associato al progetto. Se il progetto non ha informazioni Git, questo è null. |
latest_session |
Oggetto | Dettagli della sessione più recente del progetto, incluso il suo ID (id), tempo di creazione (created_at) e branch Git (git_branch). Se il progetto non ha sessioni, questo è null. Questo campo contiene solo una sessione. Per elencare tutte le sessioni, usa invece il endpoint delle Sessioni. |
Le risposte possono includere campi aggiuntivi che non sono elencati qui, e nuovi campi possono essere aggiunti nel tempo. Ignora qualsiasi campo che non riconosci e non fare affidamento su campi non documentati.
Esempio di Corpo della Risposta
[
{
"project_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "webapp-ci",
"selected_project_type": "axe-devtools-watcher",
"test_language": "typescript",
"test_platform": "Playwright",
"role": "admin",
"user_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"enterprise_id": "3f2b8e1a-6c4d-4f7e-9a0b-1d2c3e4f5a6b",
"is_enterprise_project": true,
"created_at": "2026-06-01T14:23:00.000Z",
"updated_at": "2026-06-10T16:45:00.000Z",
"run_by": "Jane Developer",
"last_session_created_at": "2026-06-14T09:12:00.000Z",
"has_git_information": true,
"git_url": "https://github.com/example/webapp",
"latest_session": {
"id": "0d4a85a2-9e6f-44ef-b814-fee8412abeb0",
"created_at": "2026-06-14T09:12:00.000Z",
"git_branch": "main"
}
},
{
"project_id": "f0e1d2c3-b4a5-6789-0123-456789abcdef",
"name": "design-system",
"selected_project_type": "axe-devtools-html",
"test_language": null,
"test_platform": null,
"role": "admin",
"user_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"enterprise_id": "3f2b8e1a-6c4d-4f7e-9a0b-1d2c3e4f5a6b",
"is_enterprise_project": true,
"created_at": "2026-05-20T08:00:00.000Z",
"updated_at": null,
"run_by": null,
"last_session_created_at": null,
"has_git_information": false,
"git_url": null,
"latest_session": null
},
{
"project_id": "c4d5e6f7-a8b9-4c0d-9e1f-2a3b4c5d6e7f",
"name": "ios-app-ci",
"selected_project_type": "axe-devtools-mobile",
"test_language": null,
"test_platform": "XCUITest",
"role": "admin",
"user_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"enterprise_id": "3f2b8e1a-6c4d-4f7e-9a0b-1d2c3e4f5a6b",
"is_enterprise_project": true,
"created_at": "2026-06-03T10:15:00.000Z",
"updated_at": null,
"run_by": "Jane Developer",
"last_session_created_at": "2026-06-15T11:05:00.000Z",
"has_git_information": false,
"git_url": null,
"latest_session": {
"id": "5b6c7d8e-9f0a-4b1c-8d2e-3f4a5b6c7d8e",
"created_at": "2026-06-15T11:05:00.000Z",
"git_branch": null
}
}
]Per mantenere l'esempio breve, ogni oggetto latest_session mostra solo tre dei suoi campi. L'API ne restituisce di più.
Paginazione con Cursore
La paginazione è opzionale. Non inviare né page_size né after e la risposta restituisce l'elenco completo dei tuoi progetti in una singola risposta, senza intestazione cursore.
Per scorrere invece i risultati, l'API Progetti utilizza la stessa paginazione basata su cursore di endpoint delle Sessioni. Quando ci sono più risultati oltre la pagina corrente, la risposta restituisce un valore cursore opaco nell'intestazione x-pagination-cursor. Trasmetti questo valore come parametro di query after nella tua richiesta successiva per recuperare la pagina successiva.
Quando la risposta non ha l'intestazione x-pagination-cursor, sei all'ultima pagina.
Individua un ID Progetto per Nome
Questo esempio utilizza curl e jq per trovare l'ID di un progetto dal suo nome:
curl -s \
-H "Accept: application/json" \
-H "X-API-Key: $API_KEY" \
"https://axe.deque.com/api-pub/v1/results/projects" \
| jq -r '.[] | select(.name == "webapp-ci") | .project_id'Passa l'ID restituito al endpoint delle Sessioni per elencare le sessioni di quel progetto.
Elenco errori di risposta dei progetti
| Stato | Causa |
|---|---|
400 Bad Request |
Il valore project_types contiene un tipo di progetto non valido, il cursore after è malformato, o page_size/after è stato ripetuto nella stringa di query. |
401 Unauthorized |
La chiave API non è valida, è mancante, o l'abbonamento associato è inattivo. |
Recuperare un progetto
Restituisce un singolo progetto tramite il suo ID, nella stessa forma di Elenco di progetti.
Richiesta
- Endpoint:
GET https://axe.deque.com/api-pub/v1/results/projects/{project_id} - Intestazioni (obbligatorie):
X-API-Key: <DEQUE_API_KEY>Accept: application/json
Recuperare gli errori di risposta di un progetto
| Stato | Causa |
|---|---|
400 Bad Request |
project_id non è un UUID valido. |
401 Unauthorized |
La chiave API non è valida, è mancante, o l'abbonamento associato è inattivo. |
403 Forbidden |
Il progetto esiste ma è al di fuori dell'organizzazione o del tipo di prodotto della tua chiave API, o non sei un membro di esso. |
404 Not Found |
Non esiste alcun progetto con tale ID, oppure il progetto è stato eliminato. |
Creare un progetto
Creare un progetto richiede l'intero set configurabile. name, selected_project_type, test_language e test_platform sono tutti obbligatori. Un campo omesso è rifiutato con un errore 400.
Richiesta
- Endpoint:
POST https://axe.deque.com/api-pub/v1/results/projects - Intestazioni (obbligatorie):
X-API-Key: <DEQUE_API_KEY>Content-Type: application/jsonAccept: application/json
Corpo della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
name |
Stringa | Sì | Il nome visualizzato del progetto. Da 1 a 512 caratteri. |
selected_project_type |
Stringa | Sì | Il tipo del progetto. Vedi Valori di configurazione del tipo di progetto. |
test_language |
Stringa o null |
Sì | Deve essere un valore valido per selected_project_type. Vedi Valori di configurazione del tipo di progetto. |
test_platform |
Stringa o null |
Sì | Deve essere un valore valido per selected_project_type e test_language. Vedi Valori di configurazione del tipo di progetto. |
Esempio di corpo della richiesta
{
"name": "webapp-ci",
"selected_project_type": "axe-devtools-watcher",
"test_language": "typescript",
"test_platform": "Playwright"
}Corpo della Risposta
Restituisce il progetto creato, nella stessa forma di Elenco di progetti. Chi crea un progetto ne diventa automaticamente l'amministratore, quindi non è necessaria una chiamata separata per la memebership. Una creazione riuscita restituisce 201 Created.
Creare errori di risposta di un progetto
| Stato | Causa |
|---|---|
400 Bad Request |
Il corpo della richiesta manca di un campo obbligatorio, oppure selected_project_type non è un tipo di progetto valido. Può anche significare che test_language/test_platform non sono una combinazione valida per selected_project_type, oppure che name è vuoto o supera i 512 caratteri. |
401 Unauthorized |
La chiave API non è valida, è mancante, o l'abbonamento associato è inattivo. |
403 Forbidden |
Il prodotto della tua chiave API non corrisponde a selected_project_type, oppure il tuo abbonamento non copre questo tipo di progetto. |
Aggiornare un progetto
Un PATCH modifica solo i campi che invii. Anche se name, selected_project_type, test_language e test_platform sono tutti opzionali, la richiesta richiede almeno uno di essi. Un campo omesso mantiene il suo valore memorizzato. Dopo l'aggiornamento, test_language e test_platform devono continuare a essere una coppia valida per il selected_project_type del progetto, quindi se ne invii solo uno, controlla prima il valore attuale dell'altro.
Richiesta
- Endpoint:
PATCH https://axe.deque.com/api-pub/v1/results/projects/{project_id} - Intestazioni (obbligatorie):
X-API-Key: <DEQUE_API_KEY>Content-Type: application/jsonAccept: application/json
Corpo della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
name |
Stringa | No | Il nome visualizzato del progetto. Da 1 a 512 caratteri. |
selected_project_type |
Stringa | No | Il tipo del progetto non può cambiare dopo la creazione. Inviare il valore attuale è accettato, e qualsiasi altro valore restituisce un errore 400. |
test_language |
Stringa o null |
No | Deve essere un valore valido per il tipo del progetto selected_project_type. Vedi Valori di configurazione del tipo di progetto. |
test_platform |
Stringa o null |
No | Deve essere un valore valido per il tipo del progetto selected_project_type e test_language. Vedi Valori di configurazione del tipo di progetto. |
Esempio di corpo della richiesta
{
"name": "webapp-ci-renamed"
}Corpo della Risposta
Restituisce il progetto aggiornato, nella stessa forma di Elenco di progetti. Un aggiornamento riuscito restituisce 200 OK.
Aggiornare errori di risposta di un progetto
| Stato | Causa |
|---|---|
400 Bad Request |
Il corpo della richiesta non ha alcuno dei campi aggiornabili, oppure selected_project_type differisce dal tipo attuale del progetto. Può anche significare che test_language/test_platform non sono validi per il tipo del progetto o che name è vuoto o supera i 512 caratteri. |
401 Unauthorized |
La chiave API non è valida, è mancante, o l'abbonamento associato è inattivo. |
403 Forbidden |
Il prodotto della tua chiave API non corrisponde al tipo del progetto selected_project_type, oppure il tuo abbonamento non copre questo tipo di progetto. Copre anche il caso in cui non sei un amministratore del progetto. |
404 Not Found |
Non esiste alcun progetto con tale ID, oppure il progetto è stato eliminato. |
Eliminare un progetto
L'eliminazione di un progetto è definitiva. Non esiste un ripristino automatico.
Richiesta
- Endpoint:
DELETE https://axe.deque.com/api-pub/v1/results/projects/{project_id} - Intestazioni (obbligatorie):
X-API-Key: <DEQUE_API_KEY>Accept: application/json
Corpo della Risposta
{ "deleted": true }Eliminare errori di risposta di un progetto
| Stato | Causa |
|---|---|
400 Bad Request |
project_id non è un UUID valido. |
401 Unauthorized |
La chiave API non è valida, è mancante, o l'abbonamento associato è inattivo. |
403 Forbidden |
Non sei un amministratore del progetto o un amministratore dell'organizzazione che possiede il progetto, oppure il tipo del progetto è al di fuori del tuo accesso. |
404 Not Found |
Non esiste alcun progetto con tale ID, oppure il progetto era già stato eliminato. |
Membership del progetto
La membership di un progetto è una sub-risorsa del progetto. Un amministratore del progetto può gestire il progetto e la sua membership. Un membro del progetto (il ruolo member nelle operazioni di membership di seguito) può accedere al progetto ma non gestirlo. Le operazioni di membership identificano gli utenti tramite il loro indirizzo email. Aggiungere un membro non richiede che tale membro possieda una licenza. L'API li registra immediatamente, ma non possono accedere al progetto finché non possiedono una licenza. L'utente di destinazione deve già appartenere alla tua organizzazione. Non puoi aggiungere qualcuno che non è già un membro dell'organizzazione.
Usa le operazioni in batch di seguito ogni volta possibile. Tutte e tre le operazioni di scrittura accettano più utenti in una singola chiamata. Questo riduce il numero di richieste che devi fare. Se gestisci la membership per una grande organizzazione, applica il backoff e riprova quando ricevi una risposta 429. Vedi 429 Too Many Requests per il modello generale.
Elenca i membri del progetto
- Endpoint:
GET https://axe.deque.com/api-pub/v1/results/projects/{project_id}/memberships - Intestazioni (obbligatorie):
X-API-Key: <DEQUE_API_KEY>,Accept: application/json
Corpo della Risposta
{
"members": [
{
"user_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"role": "admin",
"email": "jane@example.com",
"first_name": "Jane",
"last_name": "Doe",
"active_license": true,
"created_at": "2026-06-01T14:23:00.000Z"
}
]
}| Campo | Tipo | Descrizione |
|---|---|---|
user_id |
Stringa | L'ID utente unico del membro. |
role |
Stringa | admin o member. |
email, first_name, last_name |
Stringa o null |
L'indirizzo email del membro è il valore che le operazioni di aggiunta, cambio ruolo e rimozione usano per identificarlo. Se il record dell'Axe Account del membro non esiste più, questi sono null. La risposta continua a elencare il membro invece di eliminare la riga, così una riga di adesione di admin esistente mostra sempre un admin nel progetto. |
active_license |
Booleano | Se il membro attualmente possiede una licenza attiva per il tipo di prodotto di questo progetto. |
created_at |
Stringa | Timestamp UTC ISO 8601 per l'ora di creazione dell'adesione. |
Aggiungi Membri al Progetto
- Endpoint:
POST https://axe.deque.com/api-pub/v1/results/projects/{project_id}/memberships - Intestazioni (obbligatorie):
X-API-Key: <DEQUE_API_KEY>,Content-Type: application/json,Accept: application/json
Corpo della richiesta
{
"user_email_role_pairs": [
{ "user_email": "sam@example.com", "role": "member" },
{ "user_email": "alex@example.com", "role": "admin" }
]
}user_email è l'indirizzo email dell'Axe Account dell'utente. La corrispondenza ignora le maiuscole e gli spazi circostanti. role accetta admin o member (contributor è accettato anche come sinonimo di member). Ogni utente può comparire solo una volta in una richiesta. Aggiungere un utente che appartiene già al progetto è un'operazione nulla per quella voce: non cambia il loro ruolo esistente. Questa è un'operazione batch. Una voce non valida rifiuta l'intera richiesta, e l'API non scrive nulla. Il messaggio di errore elenca ogni voce che ha fallito, così puoi correggere un batch in una sola volta.
Una richiesta riuscita restituisce 201 Created con { "created": true }, indipendentemente dal fatto che la richiesta abbia effettivamente aggiunto nuove adesioni.
Cambia Ruoli dei Membri
- Endpoint:
PATCH https://axe.deque.com/api-pub/v1/results/projects/{project_id}/memberships - Intestazioni (obbligatorie):
X-API-Key: <DEQUE_API_KEY>,Content-Type: application/json,Accept: application/json - Corpo della richiesta: stessa struttura
user_email_role_pairsdi Aggiungi Membri al Progetto
Ogni user_email deve appartenere a un membro attuale del progetto. Un progetto deve sempre conservare almeno un admin. L'API rifiuta una richiesta che lascia il progetto senza admin. Un unico membro rimanente che è l'unico admin del progetto non può cambiare il proprio ruolo. Questa è un'operazione batch. Una voce non valida rifiuta l'intera richiesta, e l'API non scrive nulla.
Una richiesta riuscita restituisce 200 OK con { "ok": true }.
Rimuovi Membri del Progetto
- Endpoint:
DELETE https://axe.deque.com/api-pub/v1/results/projects/{project_id}/memberships?user_emails={comma-separated,url-encoded,emails} - Intestazioni (obbligatorie):
X-API-Key: <DEQUE_API_KEY>,Accept: application/json
Passa gli indirizzi email degli utenti da rimuovere come un elenco separato da virgola in un unico parametro di query user_emails, e codifica l'URL del valore. Ad esempio, un + letterale in un indirizzo che non è codificato arriva come uno spazio e viene rifiutato come malformato. Non c'è un corpo della richiesta. Rimuovere un utente che non è un membro ha successo e non rimuove nulla, quindi una richiesta ripetuta non è un errore. Un progetto deve sempre conservare almeno un admin. L'API rifiuta una richiesta che rimuove l'ultimo admin del progetto. Un unico membro rimanente che è l'unico admin del progetto non può rimuovere sé stesso.
Una richiesta riuscita restituisce 200 OK con gli indirizzi che ha rimosso e quelli che non corrispondevano a nessun membro, così puoi distinguere un errore di digitazione da una rimozione completata:
{
"deleted": true,
"removed": ["sam@example.com"],
"unmatched": ["alx@example.com"]
}Errori di Risposta sull'Adesione al Progetto
| Stato | Causa |
|---|---|
400 Bad Request |
project_id non è un UUID valido, user_email_role_pairs è mancante o mal formato, un user_email non è un indirizzo email valido, o lo stesso utente appare più di una volta. Copre anche un role che non è admin o member, o un valore user_emails che manca, è ripetuto come parametri separati, o è mal formato nella richiesta di rimozione. Nella richiesta di aggiunta, copre un indirizzo email che non appartiene alla tua organizzazione. Nella richiesta di cambio ruolo, copre un indirizzo email che non appartiene a un membro del progetto. In qualsiasi richiesta di scrittura, copre un indirizzo email che corrisponde a più di un utente; l'API lo rifiuta invece di rischiare un cambiamento alla persona sbagliata. |
401 Unauthorized |
La chiave API non è valida, è mancante, o l'abbonamento associato è inattivo. |
403 Forbidden |
Non sei un admin del progetto o dell'organizzazione. Copre anche un cambiamento che lascia il progetto senza admin, o un unico membro rimanente che tenta di cambiare o rimuovere la propria adesione. |
404 Not Found |
Non esiste alcun progetto con tale ID, oppure il progetto è stato eliminato. |
