POST/v1/push/sources/{source_id}/documents
Изпращане на документ (създаване или замяна)
push_upsert_document
Създава или заменя документ по external_id. С JSON изпратете съдържанието в content (content_type: html, markdown или text, до 5 MB). С multipart/form-data изпратете файла в частта file (до 100 MB, същите формати като при качване в базата от знания), а метаданните – в частта document (JSON със същия вид без content) или като отделни полета external_id, title, url, path, tags. sync_number е номерът на отворената синхронизация. Без него документът се записва веднага (директно създаване или замяна), но следващата пълна синхронизация го изтрива, освен ако не бъде изпратен отново. Повторното изпращане на същия документ връща unchanged (идемпотентно). Документът става карта при следващата синхронизация на източника (в рамките на минута; в отворена синхронизация – след затварянето ѝ). От версия 1.62.0: полета на картата (metadata, category, verifiers, verify_interval_days), файл от качване на части (upload_id) и прикачени файлове (attachments); отговорът съдържа status и card_id (резултата за документа). Лимитът на документите на източник зависи от плана.
Удостоверяване
Изпратете API ключ в заглавката Authorization: Authorization: Bearer <ключ>.
Параметри на пътя
source_idintegerзадължително
Параметри на заявката (query)
sync_numberinteger
Параметри в заглавката
Idempotency-KeystringКлюч за безопасен повторен опит при запис: от 1 до 255 печатаеми ASCII знака; препоръчва се UUID v4 за всяка логическа операция. Повторен опит със същия ключ в рамките на 24 часа не изпълнява операцията отново: връща записания отговор (статус, заглавки и тяло) със заглавката
Idempotency-Replayed: true. Същият ключ с друг метод, път,Content-Typeили тяло връща409 api.idempotency_mismatch, а докато първата заявка още се изпълнява –409 api.idempotency_in_progressсRetry-After: 1. След отговор 5xx или 429 ключът се освобождава и повторният опит изпълнява операцията отново. Ключът важи в рамките на организацията и извикващия (API ключ, потребител или ключ на собствен източник).length ≥ 1, length ≤ 255
Тяло на заявката
application/json
external_idstringзадължителноВашият постоянен ID на документа. Изпращането на същия ID заменя документа.
length ≤ 512
titlestringзадължителноlength ≤ 500
urlstringВръзка към документа във вашата система (http или https).
contentstringСъдържание (до 5 MB).
content_typestringДопустими стойности:
htmlmarkdowntextПо подразбиране: "html"
patharray of string | stringПапки на документа: масив от имена или низ, разделен с „/“ (до 10 нива).
permissionsPushPermissionstagsarray of stringitems ≤ 50
author_emailstringАвтор. Става отговорник на картата, ако е потребител на Sursa.
updated_atstring (date-time)Време на промяна във вашата система (част от версията на документа).
metadataMetadataPatchmetadataна картата на документа (от версия 1.62.0): обектът заменя предишния на картата,{}премахва всички двойки; без полетоmetadataметаданните на картата не се променят.categorystringКатегория на картата: ключът на категория на организацията (
GET /v1/categories), от версия 1.62.0.length ≤ 64
verifiersPushVerifiersverify_interval_daysintegerИнтервал на проверка на картата в дни (от версия 1.62.0); без него – интервалът на източника.
≥ 1, ≤ 3650
upload_idstringФайл на документа от качване на части (
upl_…, от версия 1.62.0) вместоcontent. Качването се използва еднократно; повторното изпращане на същия документ със същияupload_idне го изразходва. Докато качването на части не е налично в инсталацията, документът се отхвърля с причинаfile_rejected.length ≤ 64
attachmentsarray of stringПрикачени файлове на документа като качвания на части (
upl_…, от версия 1.62.0): всеки става отделна карта на източника със същата папка, права и полета на картата. Прикачен файл, който липсва в нова версия на документа, се архивира.items ≤ 20
multipart/form-data
filestring (binary)задължителноdocumentstringJSON метаданни на документа (полетата на
PushDocumentбезcontent).external_idstringtitlestringurlstringpathstringtagsstring
Отговори
200Записан
Заглавки на отговора
RateLimit-PolicyДействащите лимити във формата на черновата на IETF
draft-ietf-httpapi-ratelimit-headers: разделени със запетая елементи"<name>";q=<quota>;w=<window in seconds>.keyе честотата на заявките на API ключа (квотата е пиковото натоварване, прозорецът е времето за пълното ѝ възстановяване; за сесия еuser, без идентификационни данни –ip);minute,dayиmonthса квотите на организацията за календарната минута, ден и месец по UTC.RateLimitКакво остава от всеки лимит в
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛимитът на най-строгия запис в
RateLimit-Policy(този с най-малко оставащи заявки).X-RateLimit-RemainingОставащи заявки по най-строгия лимит.
X-RateLimit-ResetСекунди до нулирането на най-строгия лимит.
Idempotency-Replayedtrueозначава, че отговорът е възпроизведен от записания за тозиIdempotency-Key: операцията не е изпълнена отново.
application/json
external_idstringзадължителноresultstringзадължителноskipped: документ от пакетatomicне е приложен, защото друг документ е отхвърлен (от версия 1.62.0).Допустими стойности:
createdupdatedunchangeddeletednot_founderrorskippedversionstringВерсия на документа (SHA-256 на съдържанието и метаданните).
errorstringПричина (когато
result=error).statusPushDocumentStatusValuecard_idstring | nullКарта на документа, ако вече е записана (от версия 1.62.0).
reasonPushDocumentReason
400Заявката е невалидна: стойност на параметър или състоянието на обекта не позволява действието (`detail` е съобщение).
Заглавки на отговора
RateLimit-PolicyДействащите лимити във формата на черновата на IETF
draft-ietf-httpapi-ratelimit-headers: разделени със запетая елементи"<name>";q=<quota>;w=<window in seconds>.keyе честотата на заявките на API ключа (квотата е пиковото натоварване, прозорецът е времето за пълното ѝ възстановяване; за сесия еuser, без идентификационни данни –ip);minute,dayиmonthса квотите на организацията за календарната минута, ден и месец по UTC.RateLimitКакво остава от всеки лимит в
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛимитът на най-строгия запис в
RateLimit-Policy(този с най-малко оставащи заявки).X-RateLimit-RemainingОставащи заявки по най-строгия лимит.
X-RateLimit-ResetСекунди до нулирането на най-строгия лимит.
application/json
401Не са изпратени идентификационни данни (нито бисквитка на сесията, нито API ключ) или ключът не е намерен.
Заглавки на отговора
RateLimit-PolicyДействащите лимити във формата на черновата на IETF
draft-ietf-httpapi-ratelimit-headers: разделени със запетая елементи"<name>";q=<quota>;w=<window in seconds>.keyе честотата на заявките на API ключа (квотата е пиковото натоварване, прозорецът е времето за пълното ѝ възстановяване; за сесия еuser, без идентификационни данни –ip);minute,dayиmonthса квотите на организацията за календарната минута, ден и месец по UTC.RateLimitКакво остава от всеки лимит в
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛимитът на най-строгия запис в
RateLimit-Policy(този с най-малко оставащи заявки).X-RateLimit-RemainingОставащи заявки по най-строгия лимит.
X-RateLimit-ResetСекунди до нулирането на най-строгия лимит.
application/json
403Действието не е разрешено: ролята е недостатъчна, няма достъп до колекцията или картата, заявката се изпълнява в режим „View as“ или организацията е спряна или изтрита (`detail` е обект с `code: org_suspended | org_deleted`).
Заглавки на отговора
RateLimit-PolicyДействащите лимити във формата на черновата на IETF
draft-ietf-httpapi-ratelimit-headers: разделени със запетая елементи"<name>";q=<quota>;w=<window in seconds>.keyе честотата на заявките на API ключа (квотата е пиковото натоварване, прозорецът е времето за пълното ѝ възстановяване; за сесия еuser, без идентификационни данни –ip);minute,dayиmonthса квотите на организацията за календарната минута, ден и месец по UTC.RateLimitКакво остава от всеки лимит в
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛимитът на най-строгия запис в
RateLimit-Policy(този с най-малко оставащи заявки).X-RateLimit-RemainingОставащи заявки по най-строгия лимит.
X-RateLimit-ResetСекунди до нулирането на най-строгия лимит.
application/json
404Обектът не съществува или не е достъпен за вас. API не потвърждава, че съществува обект с ограничен достъп.
Заглавки на отговора
RateLimit-PolicyДействащите лимити във формата на черновата на IETF
draft-ietf-httpapi-ratelimit-headers: разделени със запетая елементи"<name>";q=<quota>;w=<window in seconds>.keyе честотата на заявките на API ключа (квотата е пиковото натоварване, прозорецът е времето за пълното ѝ възстановяване; за сесия еuser, без идентификационни данни –ip);minute,dayиmonthса квотите на организацията за календарната минута, ден и месец по UTC.RateLimitКакво остава от всеки лимит в
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛимитът на най-строгия запис в
RateLimit-Policy(този с най-малко оставащи заявки).X-RateLimit-RemainingОставащи заявки по най-строгия лимит.
X-RateLimit-ResetСекунди до нулирането на най-строгия лимит.
application/json
409Състоянието на обекта не позволява действието, например дубликат, индексиране в ход или задание, което вече е обработено.
Заглавки на отговора
RateLimit-PolicyДействащите лимити във формата на черновата на IETF
draft-ietf-httpapi-ratelimit-headers: разделени със запетая елементи"<name>";q=<quota>;w=<window in seconds>.keyе честотата на заявките на API ключа (квотата е пиковото натоварване, прозорецът е времето за пълното ѝ възстановяване; за сесия еuser, без идентификационни данни –ip);minute,dayиmonthса квотите на организацията за календарната минута, ден и месец по UTC.RateLimitКакво остава от всеки лимит в
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛимитът на най-строгия запис в
RateLimit-Policy(този с най-малко оставащи заявки).X-RateLimit-RemainingОставащи заявки по най-строгия лимит.
X-RateLimit-ResetСекунди до нулирането на най-строгия лимит.
application/json
413Тялото на заявката надвишава допустимия размер.
Заглавки на отговора
RateLimit-PolicyДействащите лимити във формата на черновата на IETF
draft-ietf-httpapi-ratelimit-headers: разделени със запетая елементи"<name>";q=<quota>;w=<window in seconds>.keyе честотата на заявките на API ключа (квотата е пиковото натоварване, прозорецът е времето за пълното ѝ възстановяване; за сесия еuser, без идентификационни данни –ip);minute,dayиmonthса квотите на организацията за календарната минута, ден и месец по UTC.RateLimitКакво остава от всеки лимит в
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛимитът на най-строгия запис в
RateLimit-Policy(този с най-малко оставащи заявки).X-RateLimit-RemainingОставащи заявки по най-строгия лимит.
X-RateLimit-ResetСекунди до нулирането на най-строгия лимит.
application/json
415Форматът на файла не се поддържа.
Заглавки на отговора
RateLimit-PolicyДействащите лимити във формата на черновата на IETF
draft-ietf-httpapi-ratelimit-headers: разделени със запетая елементи"<name>";q=<quota>;w=<window in seconds>.keyе честотата на заявките на API ключа (квотата е пиковото натоварване, прозорецът е времето за пълното ѝ възстановяване; за сесия еuser, без идентификационни данни –ip);minute,dayиmonthса квотите на организацията за календарната минута, ден и месец по UTC.RateLimitКакво остава от всеки лимит в
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛимитът на най-строгия запис в
RateLimit-Policy(този с най-малко оставащи заявки).X-RateLimit-RemainingОставащи заявки по най-строгия лимит.
X-RateLimit-ResetСекунди до нулирането на най-строгия лимит.
application/json
422Грешка при валидиране: тялото или параметрите не съответстват на схемата (`detail` е списък с грешки при валидиране) или стойност на параметър е извън допустимия диапазон (`detail` е съобщение).
Заглавки на отговора
RateLimit-PolicyДействащите лимити във формата на черновата на IETF
draft-ietf-httpapi-ratelimit-headers: разделени със запетая елементи"<name>";q=<quota>;w=<window in seconds>.keyе честотата на заявките на API ключа (квотата е пиковото натоварване, прозорецът е времето за пълното ѝ възстановяване; за сесия еuser, без идентификационни данни –ip);minute,dayиmonthса квотите на организацията за календарната минута, ден и месец по UTC.RateLimitКакво остава от всеки лимит в
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛимитът на най-строгия запис в
RateLimit-Policy(този с най-малко оставащи заявки).X-RateLimit-RemainingОставащи заявки по най-строгия лимит.
X-RateLimit-ResetСекунди до нулирането на най-строгия лимит.
application/json
429Твърде много заявки (`api.rate_limited`), квотата на организацията за минутата, деня или месеца е изчерпана (`api.quota_exceeded`; `error.details` съдържа `quota`, `limit` и `reset_at`), достигнат е лимит на организацията или услугата за отговори е заета (`answers.engine_busy`). Изчакайте времето от заглавката `Retry-After`.
Заглавки на отговора
Retry-AfterБрой секунди, които да изчакате, преди да повторите заявката.
RateLimit-PolicyДействащите лимити във формата на черновата на IETF
draft-ietf-httpapi-ratelimit-headers: разделени със запетая елементи"<name>";q=<quota>;w=<window in seconds>.keyе честотата на заявките на API ключа (квотата е пиковото натоварване, прозорецът е времето за пълното ѝ възстановяване; за сесия еuser, без идентификационни данни –ip);minute,dayиmonthса квотите на организацията за календарната минута, ден и месец по UTC.RateLimitКакво остава от всеки лимит в
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛимитът на най-строгия запис в
RateLimit-Policy(този с най-малко оставащи заявки).X-RateLimit-RemainingОставащи заявки по най-строгия лимит.
X-RateLimit-ResetСекунди до нулирането на най-строгия лимит.
application/json
Кодове на грешки
Кодове, които тази операция може да върне в error.code, освен общите кодове на всяка заявка.
- 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
Безопасни повторни опити
Изпращайте заглавката Idempotency-Key (например UUID) с всяка заявка POST и PATCH. Повторен опит със същия ключ в рамките на 24 часа връща запазения отговор, вместо да изпълни заявката отново.
Лимити на честотата
Отговорите съдържат заглавките RateLimit и RateLimit-Policy, както и по-ранните X-RateLimit-Limit, X-RateLimit-Remaining и X-RateLimit-Reset. Отговорът 429 съдържа Retry-After в секунди: изчакайте и опитайте отново.