Sarka External API v1

Julkinen asiakasdokumentaatio raportointi-, telemetria-, palvelupyyntö- ja export-rajapintoihin. Tämä sivu kertoo miten API otetaan käyttöön, miten dataa kysellään ja miten integraatiot kannattaa rakentaa tuotantoon.

Base URLhttps://api.sarkahq.com/api/external/v1
AutentikointiX-API-Key headerissa
54 operaatiotaOpenAPI v1 -referenssissä
customerName-scopeAsiakasavaimet rajataan nimellä

1. Käyttöönotto

Tenant-avain

Käytä tenant-avainta organisaation laajuisiin integraatioihin, BI-raportointiin, data lakeen ja muihin järjestelmiin, joiden kuuluu nähdä koko tenantin data.

Asiakasavain

Käytä asiakasavainta ulkoisille asiakkaille ja rajatuille portaaleille. Asiakasavain näkee vain rivit, joiden customerName vastaa avaimen asetusta.

Tärkeää: customerName on tällä hetkellä scope-rajauksen avain. Käytä täsmälleen samaa nimeä asseteilla, palvelupyynnöillä ja avainasetuksessa.
export SARKA_BASE_URL="https://api.sarkahq.com/api/external/v1"
export SARKA_API_KEY="sk_sarka_..."

curl -sS "$SARKA_BASE_URL/me" \
  -H "X-API-Key: $SARKA_API_KEY" | jq .

Ensimmäinen tuotantotesti on aina GET /me suhteessa base URLiin, eli /api/external/v1/me. Se kertoo tenantin, avaimen nimen, customerName-scopen ja API-version.

2. Kyselyesimerkit

Raportoinnin kooste

curl -sS "$SARKA_BASE_URL/reporting/overview?from=2026-01-01&to=2026-12-31" \
  -H "X-API-Key: $SARKA_API_KEY" | jq .

Assetit ja metatiedot

curl -sS "$SARKA_BASE_URL/reporting/assets?q=kurottaja&assetType=Kurottaja&limit=100" \
  -H "X-API-Key: $SARKA_API_KEY" | jq .

Yksittäinen raportti

curl -sS "$SARKA_BASE_URL/reporting/reports/00000000-0000-0000-0000-000000000000" \
  -H "X-API-Key: $SARKA_API_KEY" | jq .

Tarkastukset suodatettuna

curl -sS "$SARKA_BASE_URL/reporting/inspections?from=2026-05-01&to=2026-05-31&status=completed&outcome=rejected&assetId=00000000-0000-0000-0000-000000000000" \
  -H "X-API-Key: $SARKA_API_KEY" | jq .

Koko kaluston päiväkäyttöaste

curl -sS "$SARKA_BASE_URL/telemetry/utilization?from=2026-05-01&to=2026-05-31&bucket=day&groupBy=fleet" \
  -H "X-API-Key: $SARKA_API_KEY" | jq .

Konekohtainen tuntikäyttöaste

curl -sS "$SARKA_BASE_URL/telemetry/utilization?from=2026-05-16T00:00:00Z&to=2026-05-17T00:00:00Z&bucket=hour&groupBy=asset&limit=500" \
  -H "X-API-Key: $SARKA_API_KEY" | jq .

Konttityö: kuormattuna vs tyhjänä

curl -sS "$SARKA_BASE_URL/telemetry/container-work?from=2026-05-01&to=2026-05-31&bucket=day&groupBy=asset&q=kurottaja" \
  -H "X-API-Key: $SARKA_API_KEY" | jq .

RFID/kuljettaja-päiväkirja

curl -sS "$SARKA_BASE_URL/telemetry/identifier-sessions?from=2026-05-16&to=2026-05-17&identifier=RFID1234" \
  -H "X-API-Key: $SARKA_API_KEY" | jq .

3. Telemetrian käsitteet

Käyttöaste

runningSeconds, stationaryRunningSeconds, utilizationPercent, hourmeterDelta ja distanceM kuvaavat koneen käyttöä valitulla tunti- tai päiväbucketilla.

Konttityö

adcin=on tarkoittaa, että spreader/lukitusmekanismi on lukittu tai kontti on mukana. adcin=off tarkoittaa avointa/tyhjää ajoa. API palauttaa loaded/empty-sekunnit, matkat ja syklit.

Tietolähde

source-kenttä kertoo, palautettiinko vastaus esilasketusta tunti-/päivätason aggregaatista vai laskettiinko se kyselyn aikana.

Aikarajaus: sessiot käyttävät overlap-semanttiikkaa. Sessio tulee mukaan, jos se osuu pyydettyyn aikaväliin, vaikka se olisi alkanut ennen from-aikaa.

4. Exportit

CSV/XLSX-viennit ovat paginoituja. Yksi vastaus palauttaa enintään 50 000 riviä. Jos X-Export-Truncated on true, hae seuraava sivu X-Next-Offset-headerin arvolla.

offset=0
while true; do
  headers=$(mktemp)
  curl -sS -D "$headers" \
    "$SARKA_BASE_URL/telemetry/utilization/export.csv?from=2026-05-01&to=2026-05-31&bucket=day&groupBy=asset&offset=$offset" \
    -H "X-API-Key: $SARKA_API_KEY" \
    -o "utilization-$offset.csv"

  truncated=$(grep -i '^X-Export-Truncated:' "$headers" | awk '{print tolower($2)}' | tr -d '\r')
  next=$(grep -i '^X-Next-Offset:' "$headers" | awk '{print $2}' | tr -d '\r')
  rm "$headers"

  [ "$truncated" = "true" ] || break
  offset="$next"
done

5. Palvelupyynnöt

Luo palvelupyyntö

curl -sS -X POST "$SARKA_BASE_URL/service-requests" \
  -H "X-API-Key: $SARKA_API_KEY" \
  -H "Idempotency-Key: customer-portal-ticket-12345" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "WC-hana vuotaa",
    "description": "Vuoto näkyy altaan alla.",
    "category": "defect",
    "priority": "high",
    "location": "A-rappu, asunto 12, WC",
    "customerName": "Kiinteistö Oy Esimerkki",
    "reportedByName": "Matti Meikäläinen",
    "reportedByEmail": "matti@example.com",
    "externalRef": "customer-portal-12345"
  }' | jq .

Päivitä ja ratkaise

curl -sS -X PATCH "$SARKA_BASE_URL/service-requests/00000000-0000-0000-0000-000000000000" \
  -H "X-API-Key: $SARKA_API_KEY" \
  -H "Idempotency-Key: customer-portal-ticket-12345-resolve" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "resolved",
    "resolution": "Liitos kiristetty ja vuoto tarkistettu.",
    "resolutionReviewed": true,
    "comment": "Ratkaistu paikan päällä."
  }' | jq .
Säännöt: resolved ja closed vaativat ratkaisun ja resolutionReviewed: true. Käsiteltyä pyyntöä ei poisteta pysyvästi, vaan se perutaan endpointilla POST /service-requests/{id}/cancel. Käytä Idempotency-Key-headeria palvelupyyntöjen luonnissa ja päivityksessä kaikissa asiakasportaalin ja ERP:n retry-kutsuissa.

6. Webhookit

Webhookit ovat push-kanava asiakkaan järjestelmiin. API sopii kyselyyn ja raportointiin; webhook sopii tapahtumailmoituksiin. Aseta webhook asiakkaan asetuksissa Webhookit-näkymässä.

TapahtumaKäyttö
inspection.completed, report.createdRaportointi- ja dokumenttivirrat.
service_request.created, service_request.updated, service_request.cancelledAsiakasportaali-, ERP- ja ticketing-integraatiot.
telemetry.geofence_alert.opened, acknowledged, resolvedAluehälytykset ja operatiivinen valvonta.
{
  "event": "service_request.created",
  "entityType": "service_request",
  "entityId": "11111111-1111-1111-1111-111111111111",
  "tenantId": "00000000-0000-0000-0000-000000000000",
  "createdAt": "2026-05-17T10:15:00Z",
  "data": {
    "id": "11111111-1111-1111-1111-111111111111",
    "title": "WC-hana vuotaa",
    "status": "new",
    "priority": "high",
    "customerName": "Kiinteistö Oy Esimerkki"
  }
}
HeaderMerkitys
X-Sarka-Webhook-IdYksittäisen toimitusyrityksen tunniste. Käytä deduplikointiin.
X-Sarka-Webhook-AttemptYrityksen numero alkaen arvosta 1.
X-Sarka-Webhook-TimestampToimitusyrityksen UTC-aikaleima RFC3339-muodossa.
X-Sarka-Signaturesha256=<hex>, HMAC-SHA256 raakaa JSON-bodya vasten, kun webhook secret on asetettu.

Retry-policy on rakenteisena endpointissa GET /webhooks/events: retryStrategy.maxAttempts ja retryStrategy.backoffSeconds.

7. Virheet, paging ja tuotantosäännöt

Virheet

400 invalid request, 401 puuttuva/virheellinen avain, 403 scope ei salli, 404 ei löydy, 409 tilasiirtymä ei sallittu, 429 rate limit, 500 palvelinvirhe.

Paging

JSON-listat käyttävät limit/offset. Oletus 100, maksimi 500. Exportit käyttävät omaa 50 000 rivin rajaa ja continuation-headereita.

Tuotanto

Älä upota avainta selaimen julkiseen JavaScriptiin. Kierrätä avaimet, lokita request-id/timestamp omassa järjestelmässä ja siedä uusia kenttiä responseissa.

8. Endpoint-kartta

GET
/me
Suhteessa base URLiin: /api/external/v1/me. Tarkista API-avain, tenant ja customerName-scope.
GET
/reporting/overview, /reporting/assets, /reporting/assets/{id}, /reporting/inspections, /reporting/inspections/{id}, /reporting/reports, /reporting/reports/{id}
Raportointi, omaisuus, tarkastukset ja raportit. Listoissa on palvelinpuolen suodatus: q, status, assetId, customerName, outcome ja impact.
GET
/reporting/asset-types, /reporting/templates
Referenssidata asiakasportaaleille, ERP-mäppäykseen ja integraatio-UI:hin.
GET
/reporting/export.csv, /reporting/export.xlsx
Raportointiviennit.
GET
/telemetry/capabilities, /telemetry/devices, /telemetry/assets/{assetId}/state, /telemetry/assets/{assetId}/positions
Telemetrian käyttöönoton, laitteiden, viimeisimmän tilan ja karttahistorian tarkistus.
GET
/telemetry/usage-sessions, /telemetry/identifier-sessions
Käyttö- ja kuljettaja/RFID-sessiot overlap-aikarajauksella.
GET
/telemetry/utilization, /telemetry/container-work, /telemetry/service-request-metrics
Hourly/daily-metriikat BI- ja raportointikäyttöön.
GET
/telemetry/*/export.csv, /telemetry/*/export.xlsx
Paginoidut telemetriaviennit.
GET
/telemetry/data-quality, /telemetry/geofences, /telemetry/operators, /telemetry/geofence-alerts
Datan laatu, geofence-määrittelyt, operaattori/RFID-referenssit ja aluehälytykset.
POST
/service-requests
Luo palvelupyyntö.
GET
/service-requests, /service-requests/{id}
Listaa ja hae palvelupyyntöjä.
PATCH
/service-requests/{id}, POST /service-requests/{id}/cancel
Päivitä, ratkaise tai peru palvelupyyntö.
POST
/service-requests/{id}/files
Lisää liite multipart/form-data-kutsulla.
GET
/webhooks/events, /webhooks/subscriptions, /webhooks/deliveries
Webhook-tapahtumakatalogi, tenantin tilaukset ja toimitusloki.

Täydellinen endpoint-, parametri- ja skeemalista: Swagger / OpenAPI Reference.