> ## Documentation Index
> Fetch the complete documentation index at: https://docs.livingsecurity.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom Push Source API

> Reģistrējiet avotu un sūtiet uz Living Security JSON vai CSV notikumu pakotnes, izmantojot ierobežota apjoma API piekļuves atslēgu.

Izmantojiet Custom Push Source, kad sistēma sūta ierakstus uz Living Security, nevis tiek aptaujāta ar Catalog savienotāju. Sūtītājs var iesniegt JSON masīvus vai CSV failus reģionālam HTTPS galapunktam.

## Pirms sākat

Jums ir nepieciešams:

* atļauja pārvaldīt integrācijas un piekļuves atslēgas Living Security
* servera puses sūtītājs, kas var veikt HTTPS `POST` pieprasījumus
* jūsu organizācijas Living Security reģions
* nemainīgs avota nosaukums un vismaz viens straumes nosaukums

Avotu nosaukumi un straumju nosaukumi ir pastāvīgas maršrutēšanas atslēgas. Avota nosaukumam jābūt no 1 līdz 64 mazajiem burtiem, cipariem vai defisēm. Straumju nosaukumos papildus ir atļautas pasvītras. Abiem jāsākas ar burtu vai ciparu.

<Warning>
  Izturieties pret API piekļuves atslēgu kā pret noslēpumu. Nenovietojiet to pārlūkprogrammas kodā, neievietojiet to
  versiju kontroles sistēmā un nesūtiet to atbalsta pieteikumā.
</Warning>

## 1. Reģistrējiet avotu un straumes

<Steps>
  <Step title="Atveriet Custom Push Source">
    Dodieties uz **Settings → Integrations → Catalog**, atrodiet **Custom Push Source** un atlasiet **Add**.
  </Step>

  <Step title="Nosauciet avotu">
    Ievadiet avota maršrutēšanas atslēgu un, ja vēlaties, aprakstu. Piemēram, izmantojiet `custom-phishing-sim`, nevis attēlojamo nosaukumu ar atstarpēm.
  </Step>

  <Step title="Pievienojiet straumes">
    Pievienojiet katru straumi, ko sūtītājs izmantos. Avota un straumes pārim jābūt izveidotam pirms pirmās sūtīšanas; nezināms pāris atgriež `404 Not Found`.
  </Step>

  <Step title="Saglabājiet avotu">
    Pēc izveides atveriet avotu sadaļā **Settings → Integrations → Connected**. Tā skatā **Push via API** ir redzams galapunkta šablons un pēdējie izpildes gadījumi.
  </Step>
</Steps>

## 2. Izveidojiet push-ingest atslēgu

Dodieties uz **Settings → Access Keys**, atlasiet **Create Access Key** un izvēlieties apjomu **Push Ingest**. Nekavējoties nokopējiet izveidoto vērtību; tā tiek parādīta tikai vienu reizi.

Atslēga ir piesaistīta vienai Living Security organizācijai. Push pieprasījumam organizācijas galvene nav nepieciešama. Informāciju par rotāciju un atsaukšanu skatiet sadaļā [API Access Keys](/lv/features/settings/api-keys).

## 3. Izvēlieties reģionālo galapunktu

Izmantojiet jūsu Living Security organizācijas resursdatora nosaukumu:

| Reģions | Base URL |
| - | - |
| Amerikas Savienotās Valstis | `https://api.us-east-1.livingsecurity.ai/api/v1` |
| Eiropas Savienība | `https://api.eu-west-1.livingsecurity.ai/api/v1` |

Pievienojiet `/push-ingest/{integrationKey}/{streamName}`. Ceļš ir reģistrjutīgs, un tam precīzi jāatbilst reģistrētajam avotam un straumei.

<ParamField path="integrationKey" type="string" required>
  Reģistrētais avota nosaukums. Izmantojiet no 1 līdz 64 mazajiem burtiem, cipariem vai defisēm, sākot ar burtu vai ciparu.
</ParamField>

<ParamField path="streamName" type="string" required>
  Reģistrētais straumes nosaukums. Ir spēkā tie paši noteikumi, un papildus ir atļautas pasvītras.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Nosūtiet push-ingest piekļuves atslēgu kā `Bearer <access-key>`.
</ParamField>

<ParamField header="Content-Type" type="string">
  Izmantojiet `application/json` JSON vai `text/csv` CSV gadījumā. Serveris var atpazīt arī JSON masīvu, ja šī galvene ir izlaista.
</ParamField>

<ParamField header="x-organization-id" type="string">
  Neobligāts organizācijas UUID. Piekļuves atslēga jau nosaka organizāciju. Ja nosūtāt šo galveni, tai jāatbilst atslēgas organizācijai; ar to nevar izvēlēties citu organizāciju.
</ParamField>

### Pieprasījuma pamatteksts

Nosūtiet augstākā līmeņa nepātukšu objektu JSON masīvu vai CSV faila baitus ar galvenes rindu. Nosauktas JSON apvalka lauka nav. Katrā pakotnē var būt līdz 10 000 ierakstu un 10 MB.

## 4. Nosūtiet JSON pakotni

Nosūtiet nepātukšu JSON masīvu, kura elementi ir objekti. `Content-Type: application/json` ir ieteicams, un to pieprasa daudzi sūtīšanas produkti, lai gan Living Security var atpazīt masīva pamattekstu arī bez tā.

<RequestExample>
  ```bash JSON batch theme={null}
  curl --request POST \
    'https://api.us-east-1.livingsecurity.ai/api/v1/push-ingest/custom-phishing-sim/events' \
    --header 'Authorization: Bearer <access-key>' \
    --header 'Content-Type: application/json' \
    --data '[
      {
        "email": "person@example.com",
        "event_at": "2026-09-21T14:30:00Z",
        "action": "reported"
      }
    ]'
  ```

  ```bash CSV file theme={null}
  curl --request POST \
    'https://api.us-east-1.livingsecurity.ai/api/v1/push-ingest/custom-phishing-sim/events' \
    --header 'Authorization: Bearer <access-key>' \
    --header 'Content-Type: text/csv' \
    --data-binary '@events.csv'
  ```
</RequestExample>

Veiksmīgs pieprasījums atgriež `202 Accepted`. Kļūdas cilnē tiek rādīts `400 Bad Request`, ja JSON pamatteksts ir nepareizi veidots:

<ResponseExample>
  ```json 202 Accepted theme={null}
  {
    "runId": "01a0c45f-ae40-7e5f-8a9b-0c1d2e3f4a5b",
    "recordsAccepted": 1,
    "integrationKey": "custom-phishing-sim",
    "streamName": "events"
  }
  ```

  ```json 400 Invalid JSON theme={null}
  {
    "statusCode": 400,
    "timestamp": "2026-09-22T14:30:00.000Z",
    "path": "/api/v1/push-ingest/custom-phishing-sim/events",
    "message": "Request body is not valid JSON. Send a JSON array of objects, or set Content-Type: text/csv to push a CSV.",
    "error": "Bad Request"
  }
  ```
</ResponseExample>

Pieņemšana nozīmē, ka pakotne ir saglabāta asinhronai apstrādei. Tā nenozīmē, ka katrs ieraksts jau ir interpretēts kā aktivitāte.
Piemēram, `400` gadījumā labojiet JSON vai sūtiet CSV ar `Content-Type: text/csv` un mēģiniet vēlreiz.

<ResponseField name="runId" type="string" required>
  Šīs pieņemtās pakotnes izpildes ID. Saglabājiet to, lai pārbaudītu apstrādes statusu.
</ResponseField>

<ResponseField name="recordsAccepted" type="number" required>
  Pieņemto un saglabāto ierakstu skaits.
</ResponseField>

<ResponseField name="integrationKey" type="string" required>
  Šajā sūtīšanā izmantotais avota nosaukums.
</ResponseField>

<ResponseField name="streamName" type="string" required>
  Šajā sūtīšanā izmantotais straumes nosaukums.
</ResponseField>

## Sūtiet CSV

Iestatiet `Content-Type: text/csv` un nosūtiet faila baitus, kā parādīts iepriekš minētajā pieprasījuma piemērā **CSV file**. Pirmā rinda nosaka lauku nosaukumus.

Būla teksts tiek pārveidots par būla vērtību, un parasts skaitlisks teksts — par skaitli. Vērtības ar sākuma nulli, nedroši lieli veseli skaitļi, datumi un cits teksts paliek kā virknes. Tukšas šūnas šo lauku izlaiž. Nepareizi veidotas rindas, nesabalansētas pēdiņas un UTF-16 faili tiek noraidīti.

## Pieprasījumu ierobežojumi un atkārtošana

| Līgums | Pašreizējā vērtība |
| - | - |
| Maksimālais ierakstu skaits | 10 000 katrā pieprasījumā |
| Maksimālais pieprasījuma pamatteksts | 10 MB |
| Pieprasījumu biežums organizācijai | 600 pieprasījumi 60 sekundēs |

Sadaliet lielākus eksportus pakotnēs, kas atbilst abiem ierobežojumiem. Gaidiet katru atbildi un saglabājiet atgriezto `runId` sūtītāja žurnālos.

| Atbilde | Nozīme | Sūtītāja darbība |
| - | - | - |
| `202` | Pakotne pieņemta | Saglabājiet `runId`; nesūtiet atkārtoti nekavējoties |
| `400` | Nederīgs nosaukums, JSON, CSV, ierakstu skaits vai pamatteksts | Izlabojiet pieprasījumu; neatkārtojiet to nemainītu |
| `401` | Trūkstoša, beigusies, atsaukta vai nederīga atslēga | Nomainiet atslēgu un izmantojiet Bearer galveni |
| `403` | Atslēgai trūkst nepieciešamā apjoma | Izveidojiet atslēgu ar apjomu **Push Ingest** |
| `404` | Avots vai straume nav reģistrēta | Reģistrējiet precīzu pāri vai izlabojiet URL |
| `413` | Pieprasījuma pamatteksts pārsniedz 10 MB | Sadaliet pakotni mazākos pieprasījumos |
| `429` | Īslaicīga ierobežošana IP līmenī | Ņemiet vērā `Retry-After`, ja tas ir norādīts, un samaziniet sūtīšanas intensitāti |
| `503` | Organizācijas ierobežojuma grupa vai ierobežotājs nav pieejams | Gaidiet `Retry-After`, pēc tam nosūtiet to pašu pakotni vēlreiz |

Parastais autentificētās organizācijas ierobežojums atgriež `503`, nevis `429`, tāpēc webhook sūtītāji to uzskata par atkārtojamu. `503` tiek atgriezts pirms pakotnes saglabāšanas; tās pašas pakotnes atkārtota nosūtīšana pēc norādītā intervāla neveido pieņemtās izpildes dublikātu.

## Pārbaudiet datu plūsmu

Atveriet Custom Push Source un pārskatiet **Push History**. Pārbaudiet straumi, ierakstu skaitu, atslēgas attiecinājumu un apstrādes statusu. Dati ar uzturētu interpretētāju pēc tam var kļūt par personām un normalizētu aktivitāti. Dati bez interpretētāja paliek saglabāti, bet neveido aktivitāti.

<Info>
  Ja ir pieejama konkrētam nodrošinātājam paredzēta rokasgrāmata, izmantojiet tajā norādītos precīzos lauku nosaukumus un
  datu struktūru. Veiksmīgs `202` pierāda piegādi, bet nepierāda, ka patvaļīga shēma
  tiek attēlota Living Security aktivitātē.
</Info>

## Problēmu novēršanas kontrolsaraksts

* Nokopējiet galapunktu no pareizā avota un aizstājiet straumes vietturi.
* Nosūtiet piekļuves atslēgu kā `Authorization: Bearer …`; `x-api-key` netiek pieņemts.
* Pārliecinieties, ka pamatteksts ir augstākā līmeņa JSON masīvs, nevis viens objekts vai ierakstus ietverošs apvalks.
* Pārbaudiet avota un straumes rakstību, ieskaitot defises, pasvītras un reģistru.
* Pirms atkārtojat pakotni, kuras atbilde tika zaudēta, pārskatiet **Push History**.
* Sazinoties ar [Living Security Support](mailto:support@livingsecurity.com), norādiet organizāciju, avotu, straumi, pieprasījuma laiku, `runId`, ja pieejams, un atbildes statusu. Nenorādiet piekļuves atslēgu vai notikumu datus.

## Saistītie materiāli

<CardGroup cols={2}>
  <Card title="Zscaler ZIA Cloud NSS" icon="shield" href="/lv/integrations/zscaler-zia-cloud-nss">
    Konfigurējiet atbalstītu Zscaler tīmekļa žurnālu plūsmu ar precīzu avotu, straumi, galvenēm un JSON struktūru.
  </Card>

  <Card title="API Access Keys" icon="key" href="/lv/features/settings/api-keys">
    Izveidojiet, rotējiet un atsauciet ierobežota apjoma akreditācijas datus.
  </Card>

  <Card title="Signal Data Sources" icon="wave-pulse" href="/lv/signals/data-sources">
    Uzziniet, kā interpretētā integrāciju aktivitāte atbalsta Signals.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.