POST/v1/catalog/resolve
Associare nomi ai servizi del catalogo
resolve_catalog_services
Per ogni nome così come compare nei dati dell’organizzazione (il nome di un servizio o di un fornitore in una tabella delle spese), restituisce la voce del catalogo corrispondente oppure niente. L’associazione è deterministica: il nome viene normalizzato (maiuscole e minuscole, segni diacritici, punteggiatura, suffissi societari come Inc, Ltd, GmbH) e confrontato per intero con il nome, il gruppo, gli alias curati e un dominio del sito web univoco. I collegamenti propri dell’organizzazione (/v1/org/service-aliases) hanno la precedenza. Con suggest: true, i nomi senza corrispondenza ricevono fino a cinque voci simili come suggerimenti per il collegamento manuale; non vengono mai applicate automaticamente. Sursa compila allo stesso modo il campo service delle entità delle risposte (AnswerEntity) e delle righe delle analisi delle spese. Fino a 200 nomi per richiesta. È un’operazione di lettura ed è disponibile in modalità “View as”.
Autenticazione
Invia una chiave API nell’intestazione Authorization: Authorization: Bearer <chiave>.
Parametri di intestazione
X-View-AsstringSolo per le chiavi API con il ruolo
admin. Esegue la richiesta come il profilo dati<profile>[:viewer|verifier|editor], ad esempioemployee:viewer. La chiave di installazione non può usare questa intestazione (403).
Parametri cookie
kb_view_asstringCookie della modalità “View as” per una sessione.
POST /auth/view-aslo imposta eDELETE /auth/view-aslo cancella.
Corpo della richiesta
application/json
Oggetto: CatalogResolveRequest
namesarray of stringobbligatorioNomi dai dati dell’organizzazione (1–200), così come compaiono nelle tabelle e nelle risposte.
items ≥ 1, items ≤ 200
suggestbooleanPer i nomi senza corrispondenza, restituisce fino a cinque voci simili (suggerimenti per il collegamento manuale).
Predefinito: false
Risposte
200Risposta riuscita
Intestazioni della risposta
RateLimit-PolicyLimiti in vigore, nel formato della bozza IETF
draft-ietf-httpapi-ratelimit-headers: elementi separati da virgole"<name>";q=<quota>;w=<window in seconds>.keyè la frequenza delle richieste della chiave API (la quota è il burst, la finestra è il tempo necessario a ricaricarla completamente; per una sessione èuser, senza credenzialiip);minute,dayemonthsono le quote dell’organizzazione per il minuto, il giorno e il mese di calendario in UTC.RateLimitQuanto resta di ciascun limite di
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimite della voce più restrittiva di
RateLimit-Policy(quella con meno richieste rimanenti).X-RateLimit-RemainingRichieste rimanenti nel limite più restrittivo.
X-RateLimit-ResetSecondi che mancano all’azzeramento del limite più restrittivo.
401Non sono state inviate credenziali (né un cookie di sessione né una chiave API), oppure la chiave non è stata trovata.
Intestazioni della risposta
RateLimit-PolicyLimiti in vigore, nel formato della bozza IETF
draft-ietf-httpapi-ratelimit-headers: elementi separati da virgole"<name>";q=<quota>;w=<window in seconds>.keyè la frequenza delle richieste della chiave API (la quota è il burst, la finestra è il tempo necessario a ricaricarla completamente; per una sessione èuser, senza credenzialiip);minute,dayemonthsono le quote dell’organizzazione per il minuto, il giorno e il mese di calendario in UTC.RateLimitQuanto resta di ciascun limite di
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimite della voce più restrittiva di
RateLimit-Policy(quella con meno richieste rimanenti).X-RateLimit-RemainingRichieste rimanenti nel limite più restrittivo.
X-RateLimit-ResetSecondi che mancano all’azzeramento del limite più restrittivo.
application/json
403L’azione non è consentita: il ruolo non è sufficiente, manca l’accesso alla raccolta o alla scheda, la richiesta viene eseguita in modalità “View as”, oppure l’organizzazione è sospesa o eliminata (`detail` è un oggetto con `code: org_suspended | org_deleted`).
Intestazioni della risposta
RateLimit-PolicyLimiti in vigore, nel formato della bozza IETF
draft-ietf-httpapi-ratelimit-headers: elementi separati da virgole"<name>";q=<quota>;w=<window in seconds>.keyè la frequenza delle richieste della chiave API (la quota è il burst, la finestra è il tempo necessario a ricaricarla completamente; per una sessione èuser, senza credenzialiip);minute,dayemonthsono le quote dell’organizzazione per il minuto, il giorno e il mese di calendario in UTC.RateLimitQuanto resta di ciascun limite di
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimite della voce più restrittiva di
RateLimit-Policy(quella con meno richieste rimanenti).X-RateLimit-RemainingRichieste rimanenti nel limite più restrittivo.
X-RateLimit-ResetSecondi che mancano all’azzeramento del limite più restrittivo.
application/json
422Errore di validazione: il corpo o i parametri non corrispondono allo schema (`detail` è un elenco di errori di validazione), oppure il valore di un parametro è fuori dall’intervallo ammesso (`detail` è un messaggio).
Intestazioni della risposta
RateLimit-PolicyLimiti in vigore, nel formato della bozza IETF
draft-ietf-httpapi-ratelimit-headers: elementi separati da virgole"<name>";q=<quota>;w=<window in seconds>.keyè la frequenza delle richieste della chiave API (la quota è il burst, la finestra è il tempo necessario a ricaricarla completamente; per una sessione èuser, senza credenzialiip);minute,dayemonthsono le quote dell’organizzazione per il minuto, il giorno e il mese di calendario in UTC.RateLimitQuanto resta di ciascun limite di
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimite della voce più restrittiva di
RateLimit-Policy(quella con meno richieste rimanenti).X-RateLimit-RemainingRichieste rimanenti nel limite più restrittivo.
X-RateLimit-ResetSecondi che mancano all’azzeramento del limite più restrittivo.
application/json
429Troppe richieste (`api.rate_limited`), la quota dell’organizzazione per il minuto, il giorno o il mese è esaurita (`api.quota_exceeded`; `error.details` contiene `quota`, `limit` e `reset_at`), è stato raggiunto il limite dell’organizzazione, oppure il servizio delle risposte è occupato (`answers.engine_busy`). Attendi il tempo indicato nell’intestazione `Retry-After`.
Intestazioni della risposta
Retry-AfterNumero di secondi da attendere prima di ripetere la richiesta.
RateLimit-PolicyLimiti in vigore, nel formato della bozza IETF
draft-ietf-httpapi-ratelimit-headers: elementi separati da virgole"<name>";q=<quota>;w=<window in seconds>.keyè la frequenza delle richieste della chiave API (la quota è il burst, la finestra è il tempo necessario a ricaricarla completamente; per una sessione èuser, senza credenzialiip);minute,dayemonthsono le quote dell’organizzazione per il minuto, il giorno e il mese di calendario in UTC.RateLimitQuanto resta di ciascun limite di
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimite della voce più restrittiva di
RateLimit-Policy(quella con meno richieste rimanenti).X-RateLimit-RemainingRichieste rimanenti nel limite più restrittivo.
X-RateLimit-ResetSecondi che mancano all’azzeramento del limite più restrittivo.
application/json
Codici di errore
Codici che questo endpoint può restituire in error.code, oltre ai codici generali di ogni richiesta.
Nuovi tentativi sicuri
Invia un’intestazione Idempotency-Key (per esempio un UUID) con ogni POST e PATCH. Un nuovo tentativo con la stessa chiave entro 24 ore restituisce la risposta salvata invece di eseguire di nuovo la richiesta.
Limiti di frequenza
Le risposte contengono le intestazioni RateLimit e RateLimit-Policy e le precedenti X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset. Una risposta 429 contiene Retry-After in secondi: attendi e riprova.