POST/v1/push/sources/{source_id}/documents
Enviar un document (crear o substituir)
push_upsert_document
Crea o substitueix un document per external_id. Amb JSON, envieu el contingut a content (content_type: html, markdown o text, fins a 5 MB). Amb multipart/form-data, envieu el fitxer a la part file (fins a 100 MB, els mateixos formats que una pujada a la base de coneixement) i les metadades a la part document (un JSON amb la mateixa forma sense content) o com a camps separats external_id, title, url, path, tags. sync_number és el número de la sincronització oberta. Sense aquest número, el document s’escriu immediatament (escriptura directa), però la sincronització completa següent l’elimina tret que es torni a enviar. Tornar a enviar el mateix document retorna unchanged (idempotent). El document es converteix en una entrada a la sincronització següent de la font (en un termini d’un minut; dins d’una sincronització oberta, després de tancar-la). Des de la 1.62.0: camps de l’entrada (metadata, category, verifiers, verify_interval_days), un fitxer d’una pujada per parts (upload_id) i adjunts (attachments); la resposta inclou status i card_id (el resultat del document). El límit de documents d’una font depèn del pla.
Autenticació
Envieu una clau d’API a la capçalera Authorization: Authorization: Bearer <clau>.
Paràmetres de camí
source_idintegerobligatori
Paràmetres de consulta
sync_numberinteger
Paràmetres de capçalera
Idempotency-KeystringClau per reintentar una escriptura de manera segura: d’1 a 255 caràcters ASCII imprimibles; es recomana un UUID v4 per operació lògica. Un reintent amb la mateixa clau en un termini de 24 hores no torna a executar l’operació: retorna la resposta desada (estat, capçaleres i cos) amb la capçalera
Idempotency-Replayed: true. La mateixa clau amb un mètode, un camí, unContent-Typeo un cos diferents retorna409 api.idempotency_mismatch; mentre la primera sol·licitud encara s’executa,409 api.idempotency_in_progressambRetry-After: 1. Després d’una resposta 5xx o 429 la clau s’allibera, i un reintent torna a executar l’operació. L’abast de la clau és l’organització i qui fa la crida (clau d’API, usuari o clau de font personalitzada).length ≥ 1, length ≤ 255
Cos de la sol·licitud
application/json
external_idstringobligatoriID estable del vostre document. Enviar el mateix ID substitueix el document.
length ≤ 512
titlestringobligatorilength ≤ 500
urlstringEnllaç al document al vostre sistema (http o https).
contentstringContingut (fins a 5 MB).
content_typestringValors permesos:
htmlmarkdowntextPer defecte: "html"
patharray of string | stringCarpetes del document: una matriu de noms o una cadena separada per «/» (fins a 10 nivells).
permissionsPushPermissionstagsarray of stringitems ≤ 50
author_emailstringAutor. Passa a ser el responsable de l’entrada si és un usuari de Sursa.
updated_atstring (date-time)Moment de la modificació al vostre sistema (forma part de la versió del document).
metadataMetadataPatchmetadatade l’entrada del document (des de la versió 1.62.0): l’objecte substitueix l’anterior de l’entrada,{}elimina totes les parelles; sense el campmetadata, les metadades de l’entrada no canvien.categorystringCategoria de l’entrada: la clau d’una categoria de l’organització (
GET /v1/categories), des de la versió 1.62.0.length ≤ 64
verifiersPushVerifiersverify_interval_daysintegerInterval de verificació de l’entrada en dies (des de la versió 1.62.0); sense aquest camp, l’interval de la font.
≥ 1, ≤ 3650
upload_idstringFitxer del document a partir d’una pujada per parts (
upl_…, des de la versió 1.62.0) en lloc decontent. Una pujada només es fa servir una vegada; tornar a enviar el mateix document amb el mateixupload_idno la consumeix. Mentre les pujades per parts no estan disponibles a la instal·lació, el document es rebutja amb el motiufile_rejected.length ≤ 64
attachmentsarray of stringFitxers adjunts del document com a pujades per parts (
upl_…, des de la versió 1.62.0): cadascun es converteix en una entrada pròpia de la font amb la mateixa carpeta, els mateixos permisos i els mateixos camps d’entrada. Un fitxer adjunt que falta en una versió nova del document s’arxiva.items ≤ 20
multipart/form-data
filestring (binary)obligatoridocumentstringMetadades del document en JSON (els camps de
PushDocumentsensecontent).external_idstringtitlestringurlstringpathstringtagsstring
Respostes
200Escrit
Capçaleres de la resposta
RateLimit-PolicyLímits vigents, en el format de l’esborrany de l’IETF
draft-ietf-httpapi-ratelimit-headers: elements separats per comes"<name>";q=<quota>;w=<window in seconds>.keyés la freqüència de sol·licituds de la clau d’API (la quota és la ràfega, la finestra és el temps que triga a reomplir-se del tot; per a una sessió ésuser, sense credencialsip);minute,dayimonthsón les quotes de l’organització per al minut, el dia i el mes naturals en UTC.RateLimitEl que queda de cada límit de
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLímit de l’element més restrictiu de
RateLimit-Policy(el que té menys sol·licituds restants).X-RateLimit-RemainingSol·licituds restants dins del límit més restrictiu.
X-RateLimit-ResetSegons que falten perquè es restableixi el límit més restrictiu.
Idempotency-Replayedtrueindica que la resposta s’ha reproduït a partir de la desada per a aquestaIdempotency-Key: l’operació no s’ha tornat a executar.
application/json
external_idstringobligatoriresultstringobligatoriskipped: un document d’un lotatomicno s’ha aplicat perquè s’ha rebutjat un altre document (des de la versió 1.62.0).Valors permesos:
createdupdatedunchangeddeletednot_founderrorskippedversionstringVersió del document (SHA-256 del contingut i de les metadades).
errorstringMotiu (quan
result=error).statusPushDocumentStatusValuecard_idstring | nullEntrada del document, si ja s’ha escrit (des de la versió 1.62.0).
reasonPushDocumentReason
400La sol·licitud no és vàlida: el valor d’un paràmetre o l’estat de l’objecte no permeten l’acció (`detail` és un missatge).
Capçaleres de la resposta
RateLimit-PolicyLímits vigents, en el format de l’esborrany de l’IETF
draft-ietf-httpapi-ratelimit-headers: elements separats per comes"<name>";q=<quota>;w=<window in seconds>.keyés la freqüència de sol·licituds de la clau d’API (la quota és la ràfega, la finestra és el temps que triga a reomplir-se del tot; per a una sessió ésuser, sense credencialsip);minute,dayimonthsón les quotes de l’organització per al minut, el dia i el mes naturals en UTC.RateLimitEl que queda de cada límit de
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLímit de l’element més restrictiu de
RateLimit-Policy(el que té menys sol·licituds restants).X-RateLimit-RemainingSol·licituds restants dins del límit més restrictiu.
X-RateLimit-ResetSegons que falten perquè es restableixi el límit més restrictiu.
application/json
401No s’han enviat credencials (ni una galeta de sessió ni una clau d’API), o no s’ha trobat la clau.
Capçaleres de la resposta
RateLimit-PolicyLímits vigents, en el format de l’esborrany de l’IETF
draft-ietf-httpapi-ratelimit-headers: elements separats per comes"<name>";q=<quota>;w=<window in seconds>.keyés la freqüència de sol·licituds de la clau d’API (la quota és la ràfega, la finestra és el temps que triga a reomplir-se del tot; per a una sessió ésuser, sense credencialsip);minute,dayimonthsón les quotes de l’organització per al minut, el dia i el mes naturals en UTC.RateLimitEl que queda de cada límit de
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLímit de l’element més restrictiu de
RateLimit-Policy(el que té menys sol·licituds restants).X-RateLimit-RemainingSol·licituds restants dins del límit més restrictiu.
X-RateLimit-ResetSegons que falten perquè es restableixi el límit més restrictiu.
application/json
403L’acció no està permesa: el rol és insuficient, no hi ha accés a la col·lecció o a l’entrada, la sol·licitud s’executa en mode «View as», o l’organització està suspesa o eliminada (`detail` és un objecte amb `code: org_suspended | org_deleted`).
Capçaleres de la resposta
RateLimit-PolicyLímits vigents, en el format de l’esborrany de l’IETF
draft-ietf-httpapi-ratelimit-headers: elements separats per comes"<name>";q=<quota>;w=<window in seconds>.keyés la freqüència de sol·licituds de la clau d’API (la quota és la ràfega, la finestra és el temps que triga a reomplir-se del tot; per a una sessió ésuser, sense credencialsip);minute,dayimonthsón les quotes de l’organització per al minut, el dia i el mes naturals en UTC.RateLimitEl que queda de cada límit de
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLímit de l’element més restrictiu de
RateLimit-Policy(el que té menys sol·licituds restants).X-RateLimit-RemainingSol·licituds restants dins del límit més restrictiu.
X-RateLimit-ResetSegons que falten perquè es restableixi el límit més restrictiu.
application/json
404L’objecte no existeix o no està disponible per a vós. L’API no confirma que existeixi un objecte restringit.
Capçaleres de la resposta
RateLimit-PolicyLímits vigents, en el format de l’esborrany de l’IETF
draft-ietf-httpapi-ratelimit-headers: elements separats per comes"<name>";q=<quota>;w=<window in seconds>.keyés la freqüència de sol·licituds de la clau d’API (la quota és la ràfega, la finestra és el temps que triga a reomplir-se del tot; per a una sessió ésuser, sense credencialsip);minute,dayimonthsón les quotes de l’organització per al minut, el dia i el mes naturals en UTC.RateLimitEl que queda de cada límit de
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLímit de l’element més restrictiu de
RateLimit-Policy(el que té menys sol·licituds restants).X-RateLimit-RemainingSol·licituds restants dins del límit més restrictiu.
X-RateLimit-ResetSegons que falten perquè es restableixi el límit més restrictiu.
application/json
409L’estat de l’objecte no permet l’acció; per exemple, un duplicat, una indexació en curs o un treball que ja s’ha processat.
Capçaleres de la resposta
RateLimit-PolicyLímits vigents, en el format de l’esborrany de l’IETF
draft-ietf-httpapi-ratelimit-headers: elements separats per comes"<name>";q=<quota>;w=<window in seconds>.keyés la freqüència de sol·licituds de la clau d’API (la quota és la ràfega, la finestra és el temps que triga a reomplir-se del tot; per a una sessió ésuser, sense credencialsip);minute,dayimonthsón les quotes de l’organització per al minut, el dia i el mes naturals en UTC.RateLimitEl que queda de cada límit de
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLímit de l’element més restrictiu de
RateLimit-Policy(el que té menys sol·licituds restants).X-RateLimit-RemainingSol·licituds restants dins del límit més restrictiu.
X-RateLimit-ResetSegons que falten perquè es restableixi el límit més restrictiu.
application/json
413El cos de la sol·licitud supera la mida permesa.
Capçaleres de la resposta
RateLimit-PolicyLímits vigents, en el format de l’esborrany de l’IETF
draft-ietf-httpapi-ratelimit-headers: elements separats per comes"<name>";q=<quota>;w=<window in seconds>.keyés la freqüència de sol·licituds de la clau d’API (la quota és la ràfega, la finestra és el temps que triga a reomplir-se del tot; per a una sessió ésuser, sense credencialsip);minute,dayimonthsón les quotes de l’organització per al minut, el dia i el mes naturals en UTC.RateLimitEl que queda de cada límit de
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLímit de l’element més restrictiu de
RateLimit-Policy(el que té menys sol·licituds restants).X-RateLimit-RemainingSol·licituds restants dins del límit més restrictiu.
X-RateLimit-ResetSegons que falten perquè es restableixi el límit més restrictiu.
application/json
415El format del fitxer no és compatible.
Capçaleres de la resposta
RateLimit-PolicyLímits vigents, en el format de l’esborrany de l’IETF
draft-ietf-httpapi-ratelimit-headers: elements separats per comes"<name>";q=<quota>;w=<window in seconds>.keyés la freqüència de sol·licituds de la clau d’API (la quota és la ràfega, la finestra és el temps que triga a reomplir-se del tot; per a una sessió ésuser, sense credencialsip);minute,dayimonthsón les quotes de l’organització per al minut, el dia i el mes naturals en UTC.RateLimitEl que queda de cada límit de
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLímit de l’element més restrictiu de
RateLimit-Policy(el que té menys sol·licituds restants).X-RateLimit-RemainingSol·licituds restants dins del límit més restrictiu.
X-RateLimit-ResetSegons que falten perquè es restableixi el límit més restrictiu.
application/json
422Error de validació: el cos o els paràmetres no coincideixen amb l’esquema (`detail` és una llista d’errors de validació), o el valor d’un paràmetre és fora de l’interval permès (`detail` és un missatge).
Capçaleres de la resposta
RateLimit-PolicyLímits vigents, en el format de l’esborrany de l’IETF
draft-ietf-httpapi-ratelimit-headers: elements separats per comes"<name>";q=<quota>;w=<window in seconds>.keyés la freqüència de sol·licituds de la clau d’API (la quota és la ràfega, la finestra és el temps que triga a reomplir-se del tot; per a una sessió ésuser, sense credencialsip);minute,dayimonthsón les quotes de l’organització per al minut, el dia i el mes naturals en UTC.RateLimitEl que queda de cada límit de
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLímit de l’element més restrictiu de
RateLimit-Policy(el que té menys sol·licituds restants).X-RateLimit-RemainingSol·licituds restants dins del límit més restrictiu.
X-RateLimit-ResetSegons que falten perquè es restableixi el límit més restrictiu.
application/json
429Massa sol·licituds (`api.rate_limited`), s’ha esgotat la quota de l’organització per al minut, el dia o el mes (`api.quota_exceeded`; `error.details` conté `quota`, `limit` i `reset_at`), s’ha arribat al límit de l’organització o el servei de respostes està ocupat (`answers.engine_busy`). Espereu el temps que indica la capçalera `Retry-After`.
Capçaleres de la resposta
Retry-AfterNombre de segons que cal esperar abans de reintentar la sol·licitud.
RateLimit-PolicyLímits vigents, en el format de l’esborrany de l’IETF
draft-ietf-httpapi-ratelimit-headers: elements separats per comes"<name>";q=<quota>;w=<window in seconds>.keyés la freqüència de sol·licituds de la clau d’API (la quota és la ràfega, la finestra és el temps que triga a reomplir-se del tot; per a una sessió ésuser, sense credencialsip);minute,dayimonthsón les quotes de l’organització per al minut, el dia i el mes naturals en UTC.RateLimitEl que queda de cada límit de
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLímit de l’element més restrictiu de
RateLimit-Policy(el que té menys sol·licituds restants).X-RateLimit-RemainingSol·licituds restants dins del límit més restrictiu.
X-RateLimit-ResetSegons que falten perquè es restableixi el límit més restrictiu.
application/json
Codis d’error
Codis que aquest punt final pot retornar a error.code, a més dels codis generals de totes les sol·licituds.
- 409api.idempotency_in_progress
- 400api.idempotency_key_invalid
- 409api.idempotency_mismatch
- 401sources.push_key_invalid
- 403sources.feature_disabled
- 400sources.push_document_invalid
- 404sources.push_sync_not_found
- 409sources.push_sync_closed
- 409sources.push_too_many_documents
- 404sources.not_found
- 403api_keys.scope
- 403org.suspended
- 403org.deleted
- 400api.metadata_invalid
- 413api.payload_too_large
- 429api.rate_limited
Reintents segurs
Envieu una capçalera Idempotency-Key (per exemple, un UUID) amb cada POST i PATCH. Un reintent amb la mateixa clau en un termini de 24 hores retorna la resposta desada en lloc de tornar a executar la sol·licitud.
Límits de freqüència
Les respostes porten les capçaleres RateLimit i RateLimit-Policy i les anteriors X-RateLimit-Limit, X-RateLimit-Remaining i X-RateLimit-Reset. Una resposta 429 té Retry-After en segons: espereu i torneu-ho a provar.