POST/v1/cards
Bestand uploaden als kaart
upload_card
Stuur het document in het veld file van een multipart/form-data-formulier. Vóór het opslaan controleert Sursa of de extensie van de bestandsnaam, het opgegeven Content-Type van het deel en de signatuur van de inhoud overeenkomen:
- PDF;
- DOCX, XLSX, XLSM, PPTX: een ZIP met het opgegeven type hoofddocument;
- ODS: een ZIP met een item mimetype;
- XLS: een OLE2-document met een werkmapstream;
- TXT, MD, CSV, TSV, HTML, AsciiDoc, EML: tekst zonder nulbytes in UTF-8 of een codering van één byte, en bij e-mail headers aan het begin;
- PNG, JPEG, TIFF, WebP, BMP: op signatuur.
Bij een afwijking geeft het request 415 files.type_mismatch; een extensie buiten de lijst met formaten geeft 415 cards.unsupported_format. Een bestand dat groter is dan de uploadlimiet van de installatie of de totale opslag van de organisatie volgens haar abonnement, geeft 413 files.too_large. Als de virusscan is ingeschakeld, geeft een geïnfecteerd bestand 422 files.infected, en als de scanner niet beschikbaar is bij het beleid “reject”, geeft het request 503 files.scan_unavailable. Elke weigering wordt in het auditlog vastgelegd als file.rejected.
In plaats van het formulier kun je een application/json-body sturen (CardUploadFromUpload, sinds 1.62.0): het bestand is een voltooide upload in delen upload_id (POST /v1/uploads met het doel card_file), de velden zijn dezelfde als in het formulier en tags is een lijst met strings. Het bestand van de upload is al gecontroleerd bij complete (formaat, virusscan), en de groottelimiet is die voor uploads in delen in plaats van die voor uploads in één request. De upload wordt één keer gebruikt, in dezelfde transactie die de kaart maakt: een al gebruikte upload geeft 409 uploads.already_used, een upload die nog niet klaar is 409 uploads.not_ready, een geweigerde upload 422 uploads.rejected, een upload met een ander doel 422 uploads.purpose_mismatch, een verlopen upload 410 uploads.expired, en een upload van een andere aanroeper of een onbekende upload 404 uploads.not_found. Als de controles van de kaart mislukken (collectie, categorie, limieten), wordt de upload niet verbruikt.
Authenticatie
Stuur een API-sleutel mee in de header Authorization: Authorization: Bearer <sleutel>.
Headerparameters
Idempotency-KeystringSleutel om een schrijfactie veilig opnieuw te proberen: 1 tot 255 afdrukbare ASCII-tekens; een UUID v4 per logische bewerking wordt aanbevolen. Een nieuwe poging met dezelfde sleutel binnen 24 uur voert de bewerking niet opnieuw uit: Sursa geeft de opgeslagen response terug (status, headers en body) met de header
Idempotency-Replayed: true. Dezelfde sleutel met een andere methode, een ander pad, een andereContent-Typeof een andere body geeft409 api.idempotency_mismatch; zolang het eerste request nog loopt,409 api.idempotency_in_progressmetRetry-After: 1. Na een 5xx- of 429-response wordt de sleutel vrijgegeven en voert een nieuwe poging de bewerking opnieuw uit. De sleutel geldt per organisatie en per aanroeper (API-sleutel, gebruiker of bronsleutel).length ≥ 1, length ≤ 255
X-View-AsstringAlleen voor API-sleutels met de rol
admin. Voert het request uit als het dataprofiel<profile>[:viewer|verifier|editor], bijvoorbeeldemployee:viewer. De installatiesleutel kan deze header niet gebruiken (403).
Cookieparameters
kb_view_asstringCookie van de modus “View as” voor een sessie.
POST /auth/view-aszet hem enDELETE /auth/view-aswist hem.
Request-body
multipart/form-data
filestring (application/octet-stream)verplichtcollectionstringStandaard: "default"
tagsstringStandaard: ""
forcebooleanStandaard: false
owner_idinteger | nullverify_interval_daysinteger | nullcategorystring | nullsensitiveboolean | nullasyncbooleanStandaard: false
reviewbooleanStandaard: false
folder_idstring | nullMap van de
collectionwaarin de nieuwe kaart komt. Een map van een andere collectie geeft400 folders.card_collection_mismatch, een ontbrekende map geeft404 folders.not_found, en zonder het rechtCOLLECTION_EDIT_CARDSop de map volgt403 authz.forbidden. De controle gebeurt voordat het bestand wordt opgeslagen. Een duplicaat van een bestand dat al is geüpload (skipped), wordt niet naar de map verplaatst.length ≤ 64
collection_idinteger | nullCollectie op ID. Wordt
collectionook meegegeven, dan heeftcollection_idvoorrang. Een collectie die niet in de organisatie bestaat of niet zichtbaar is, geeft404 collections.not_found.external_idstring | nullexternal_idvan de nieuwe kaart. Daarmee wordt de kaart aangemaakt, ook als de collectie hetzelfde bestand al heeft. Gebruikt een andere kaart van de organisatie deze waarde, dan geeft het request409 cards.external_id_taken. GebruikPUT /v1/cards-by-external-id/{external_id}om een kaart opexternal_idaan te maken of te vervangen.length ≤ 512
metadatastring | nullmetadatavan de nieuwe kaart: een JSON-object als waarde van het formulierveld. De regels zijn die vanMetadataPatch.
application/json
upload_idstringverplichtEen gereedstaande upload (
ready) met het doelcard_file; die wordt één keer gebruikt.collectionstringStandaard: "default"
collection_idinteger | nullCollectie op ID. Wordt ook
collectionmeegegeven, dan heeftcollection_idvoorrang. Een collectie die niet bestaat in de organisatie, niet zichtbaar is of buiten de collecties van de sleutel valt, geeft404 collections.not_found.tagsarray of stringitems ≤ 30
forcebooleanStandaard: false
owner_idinteger | nullverify_interval_daysinteger | nullcategorystring | nullsensitiveboolean | nullasyncbooleanStandaard: false
reviewbooleanStandaard: false
folder_idstring | nulllength ≤ 64
external_idstring | nullexternal_idvan de nieuwe kaart, zoals in het formulierveld. Hiermee wordt de kaart ook gemaakt als de collectie hetzelfde bestand al heeft. Gebruikt een andere kaart van de organisatie deze waarde, dan geeft het request409 cards.external_id_taken.length ≤ 512
metadataMetadataPatch
Responses
200`queued` (asynchroon), `skipped` (duplicaat), `ready` of `error` (synchroon).
Responseheaders
RateLimit-PolicyGeldende limieten, in het formaat van het IETF-concept
draft-ietf-httpapi-ratelimit-headers: items gescheiden door komma’s,"<name>";q=<quota>;w=<window in seconds>.keyis de requestsnelheid van de API-sleutel (het quotum is de piek, het venster de tijd om die volledig aan te vullen; voor een sessie is hetuser, zonder authenticatiegegevensip);minute,dayenmonthzijn de quota van de organisatie voor de kalenderminuut, -dag en -maand in UTC.RateLimitWat er over is van elke limiet in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimiet van de strengste regel in
RateLimit-Policy(die met de minste resterende requests).X-RateLimit-RemainingResterende requests onder de strengste limiet.
X-RateLimit-ResetSeconden tot de strengste limiet wordt teruggezet.
Idempotency-Replayedtrue: de response is opnieuw afgespeeld uit de opgeslagen response voor dezeIdempotency-Key; de bewerking is niet opnieuw uitgevoerd.
application/json
400Het request is ongeldig: een parameterwaarde of de toestand van het object staat de actie niet toe (`detail` is een melding).
Responseheaders
RateLimit-PolicyGeldende limieten, in het formaat van het IETF-concept
draft-ietf-httpapi-ratelimit-headers: items gescheiden door komma’s,"<name>";q=<quota>;w=<window in seconds>.keyis de requestsnelheid van de API-sleutel (het quotum is de piek, het venster de tijd om die volledig aan te vullen; voor een sessie is hetuser, zonder authenticatiegegevensip);minute,dayenmonthzijn de quota van de organisatie voor de kalenderminuut, -dag en -maand in UTC.RateLimitWat er over is van elke limiet in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimiet van de strengste regel in
RateLimit-Policy(die met de minste resterende requests).X-RateLimit-RemainingResterende requests onder de strengste limiet.
X-RateLimit-ResetSeconden tot de strengste limiet wordt teruggezet.
application/json
401Er zijn geen authenticatiegegevens meegestuurd (geen sessiecookie en geen API-sleutel), of de sleutel is niet gevonden.
Responseheaders
RateLimit-PolicyGeldende limieten, in het formaat van het IETF-concept
draft-ietf-httpapi-ratelimit-headers: items gescheiden door komma’s,"<name>";q=<quota>;w=<window in seconds>.keyis de requestsnelheid van de API-sleutel (het quotum is de piek, het venster de tijd om die volledig aan te vullen; voor een sessie is hetuser, zonder authenticatiegegevensip);minute,dayenmonthzijn de quota van de organisatie voor de kalenderminuut, -dag en -maand in UTC.RateLimitWat er over is van elke limiet in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimiet van de strengste regel in
RateLimit-Policy(die met de minste resterende requests).X-RateLimit-RemainingResterende requests onder de strengste limiet.
X-RateLimit-ResetSeconden tot de strengste limiet wordt teruggezet.
application/json
402De organisatie heeft een abonnementslimiet bereikt (kaarten, opslag of gebruikers). `error.details` bevat `kind`, `limit` en `used`.
Responseheaders
RateLimit-PolicyGeldende limieten, in het formaat van het IETF-concept
draft-ietf-httpapi-ratelimit-headers: items gescheiden door komma’s,"<name>";q=<quota>;w=<window in seconds>.keyis de requestsnelheid van de API-sleutel (het quotum is de piek, het venster de tijd om die volledig aan te vullen; voor een sessie is hetuser, zonder authenticatiegegevensip);minute,dayenmonthzijn de quota van de organisatie voor de kalenderminuut, -dag en -maand in UTC.RateLimitWat er over is van elke limiet in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimiet van de strengste regel in
RateLimit-Policy(die met de minste resterende requests).X-RateLimit-RemainingResterende requests onder de strengste limiet.
X-RateLimit-ResetSeconden tot de strengste limiet wordt teruggezet.
application/json
403De actie is niet toegestaan: de rol volstaat niet, er is geen toegang tot de collectie of kaart, het request draait in de modus “View as”, of de organisatie is opgeschort of verwijderd (`detail` is een object met `code: org_suspended | org_deleted`).
Responseheaders
RateLimit-PolicyGeldende limieten, in het formaat van het IETF-concept
draft-ietf-httpapi-ratelimit-headers: items gescheiden door komma’s,"<name>";q=<quota>;w=<window in seconds>.keyis de requestsnelheid van de API-sleutel (het quotum is de piek, het venster de tijd om die volledig aan te vullen; voor een sessie is hetuser, zonder authenticatiegegevensip);minute,dayenmonthzijn de quota van de organisatie voor de kalenderminuut, -dag en -maand in UTC.RateLimitWat er over is van elke limiet in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimiet van de strengste regel in
RateLimit-Policy(die met de minste resterende requests).X-RateLimit-RemainingResterende requests onder de strengste limiet.
X-RateLimit-ResetSeconden tot de strengste limiet wordt teruggezet.
application/json
404Het object bestaat niet of is niet voor jou beschikbaar. De API bevestigt niet dat een afgeschermd object bestaat.
Responseheaders
RateLimit-PolicyGeldende limieten, in het formaat van het IETF-concept
draft-ietf-httpapi-ratelimit-headers: items gescheiden door komma’s,"<name>";q=<quota>;w=<window in seconds>.keyis de requestsnelheid van de API-sleutel (het quotum is de piek, het venster de tijd om die volledig aan te vullen; voor een sessie is hetuser, zonder authenticatiegegevensip);minute,dayenmonthzijn de quota van de organisatie voor de kalenderminuut, -dag en -maand in UTC.RateLimitWat er over is van elke limiet in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimiet van de strengste regel in
RateLimit-Policy(die met de minste resterende requests).X-RateLimit-RemainingResterende requests onder de strengste limiet.
X-RateLimit-ResetSeconden tot de strengste limiet wordt teruggezet.
application/json
409De toestand van het object staat de actie niet toe, bijvoorbeeld een duplicaat, een lopende indexering of een job die al is verwerkt.
Responseheaders
RateLimit-PolicyGeldende limieten, in het formaat van het IETF-concept
draft-ietf-httpapi-ratelimit-headers: items gescheiden door komma’s,"<name>";q=<quota>;w=<window in seconds>.keyis de requestsnelheid van de API-sleutel (het quotum is de piek, het venster de tijd om die volledig aan te vullen; voor een sessie is hetuser, zonder authenticatiegegevensip);minute,dayenmonthzijn de quota van de organisatie voor de kalenderminuut, -dag en -maand in UTC.RateLimitWat er over is van elke limiet in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimiet van de strengste regel in
RateLimit-Policy(die met de minste resterende requests).X-RateLimit-RemainingResterende requests onder de strengste limiet.
X-RateLimit-ResetSeconden tot de strengste limiet wordt teruggezet.
application/json
410Het object bestond, maar is niet meer beschikbaar: de link is al gebruikt of verlopen, of het bestand is aan het einde van de bewaartermijn verwijderd.
Responseheaders
RateLimit-PolicyGeldende limieten, in het formaat van het IETF-concept
draft-ietf-httpapi-ratelimit-headers: items gescheiden door komma’s,"<name>";q=<quota>;w=<window in seconds>.keyis de requestsnelheid van de API-sleutel (het quotum is de piek, het venster de tijd om die volledig aan te vullen; voor een sessie is hetuser, zonder authenticatiegegevensip);minute,dayenmonthzijn de quota van de organisatie voor de kalenderminuut, -dag en -maand in UTC.RateLimitWat er over is van elke limiet in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimiet van de strengste regel in
RateLimit-Policy(die met de minste resterende requests).X-RateLimit-RemainingResterende requests onder de strengste limiet.
X-RateLimit-ResetSeconden tot de strengste limiet wordt teruggezet.
application/json
413De request-body overschrijdt de toegestane grootte.
Responseheaders
RateLimit-PolicyGeldende limieten, in het formaat van het IETF-concept
draft-ietf-httpapi-ratelimit-headers: items gescheiden door komma’s,"<name>";q=<quota>;w=<window in seconds>.keyis de requestsnelheid van de API-sleutel (het quotum is de piek, het venster de tijd om die volledig aan te vullen; voor een sessie is hetuser, zonder authenticatiegegevensip);minute,dayenmonthzijn de quota van de organisatie voor de kalenderminuut, -dag en -maand in UTC.RateLimitWat er over is van elke limiet in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimiet van de strengste regel in
RateLimit-Policy(die met de minste resterende requests).X-RateLimit-RemainingResterende requests onder de strengste limiet.
X-RateLimit-ResetSeconden tot de strengste limiet wordt teruggezet.
application/json
415Het bestandsformaat wordt niet ondersteund.
Responseheaders
RateLimit-PolicyGeldende limieten, in het formaat van het IETF-concept
draft-ietf-httpapi-ratelimit-headers: items gescheiden door komma’s,"<name>";q=<quota>;w=<window in seconds>.keyis de requestsnelheid van de API-sleutel (het quotum is de piek, het venster de tijd om die volledig aan te vullen; voor een sessie is hetuser, zonder authenticatiegegevensip);minute,dayenmonthzijn de quota van de organisatie voor de kalenderminuut, -dag en -maand in UTC.RateLimitWat er over is van elke limiet in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimiet van de strengste regel in
RateLimit-Policy(die met de minste resterende requests).X-RateLimit-RemainingResterende requests onder de strengste limiet.
X-RateLimit-ResetSeconden tot de strengste limiet wordt teruggezet.
application/json
422Validatiefout: de body of de parameters komen niet overeen met het schema (`detail` is een lijst met validatiefouten), of een parameterwaarde valt buiten het bereik (`detail` is een melding).
Responseheaders
RateLimit-PolicyGeldende limieten, in het formaat van het IETF-concept
draft-ietf-httpapi-ratelimit-headers: items gescheiden door komma’s,"<name>";q=<quota>;w=<window in seconds>.keyis de requestsnelheid van de API-sleutel (het quotum is de piek, het venster de tijd om die volledig aan te vullen; voor een sessie is hetuser, zonder authenticatiegegevensip);minute,dayenmonthzijn de quota van de organisatie voor de kalenderminuut, -dag en -maand in UTC.RateLimitWat er over is van elke limiet in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimiet van de strengste regel in
RateLimit-Policy(die met de minste resterende requests).X-RateLimit-RemainingResterende requests onder de strengste limiet.
X-RateLimit-ResetSeconden tot de strengste limiet wordt teruggezet.
application/json
429Te veel requests (`api.rate_limited`), het quotum van de organisatie voor de minuut, dag of maand is op (`api.quota_exceeded`; `error.details` bevat `quota`, `limit` en `reset_at`), de limiet van de organisatie is bereikt, of de antwoorddienst is bezet (`answers.engine_busy`). Wacht de tijd af die in de header `Retry-After` staat.
Responseheaders
Retry-AfterAantal seconden dat je moet wachten voordat je het request opnieuw probeert.
RateLimit-PolicyGeldende limieten, in het formaat van het IETF-concept
draft-ietf-httpapi-ratelimit-headers: items gescheiden door komma’s,"<name>";q=<quota>;w=<window in seconds>.keyis de requestsnelheid van de API-sleutel (het quotum is de piek, het venster de tijd om die volledig aan te vullen; voor een sessie is hetuser, zonder authenticatiegegevensip);minute,dayenmonthzijn de quota van de organisatie voor de kalenderminuut, -dag en -maand in UTC.RateLimitWat er over is van elke limiet in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimiet van de strengste regel in
RateLimit-Policy(die met de minste resterende requests).X-RateLimit-RemainingResterende requests onder de strengste limiet.
X-RateLimit-ResetSeconden tot de strengste limiet wordt teruggezet.
application/json
503Een dienst waarvan dit request afhangt, is tijdelijk niet beschikbaar. Probeer het later opnieuw.
Responseheaders
RateLimit-PolicyGeldende limieten, in het formaat van het IETF-concept
draft-ietf-httpapi-ratelimit-headers: items gescheiden door komma’s,"<name>";q=<quota>;w=<window in seconds>.keyis de requestsnelheid van de API-sleutel (het quotum is de piek, het venster de tijd om die volledig aan te vullen; voor een sessie is hetuser, zonder authenticatiegegevensip);minute,dayenmonthzijn de quota van de organisatie voor de kalenderminuut, -dag en -maand in UTC.RateLimitWat er over is van elke limiet in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimiet van de strengste regel in
RateLimit-Policy(die met de minste resterende requests).X-RateLimit-RemainingResterende requests onder de strengste limiet.
X-RateLimit-ResetSeconden tot de strengste limiet wordt teruggezet.
application/json
Foutcodes
Codes die dit endpoint in error.code kan teruggeven, naast de algemene codes van elk request.
- 400api.metadata_invalid
- 409api.idempotency_in_progress
- 400api.idempotency_key_invalid
- 409api.idempotency_mismatch
- 401auth.not_authenticated
- 403auth.system_scope
- 403authz.forbidden
- 403cards.duplicate_restricted
- 409cards.external_id_taken
- 403cards.no_access
- 404cards.not_found
- 400cards.review_requires_async
- 403cards.sensitivity_admin_only
- 415cards.unsupported_format
- 400categories.unknown
- 409collections.index_outdated
- 400collections.invalid_name
- 403collections.no_write_access
- 404collections.not_found
- 422files.infected
- 503files.scan_unavailable
- 413files.too_large
- 415files.type_mismatch
- 400folders.card_collection_mismatch
- 404folders.not_found
- 404jobs.not_found
- 402limits.cards
- 403org.deleted
- 403org.suspended
- 409uploads.already_used
- 410uploads.expired
- 404uploads.not_found
- 409uploads.not_ready
- 422uploads.purpose_mismatch
- 422uploads.rejected
- 400users.not_in_org
- 422validation.failed
- 403view_as.read_only
Veilig opnieuw proberen
Stuur bij elke POST en PATCH een header Idempotency-Key mee (bijvoorbeeld een UUID). Een nieuwe poging met dezelfde sleutel binnen 24 uur geeft de opgeslagen response terug, zonder het request opnieuw uit te voeren.
Snelheidslimieten
Responses bevatten de headers RateLimit en RateLimit-Policy en de eerdere X-RateLimit-Limit, X-RateLimit-Remaining en X-RateLimit-Reset. Een response met status 429 bevat Retry-After in seconden: wacht en probeer het daarna opnieuw.