# `mozaik.geliver` — Geliver ile kargo Kendi Geliver hesabınla etiket oluştur, kargo fiyatlarını karşılaştır ve takibi otomatik al. - version **1.1.0** · publisher `mozaik` · runtime `platform` · listed: true - provider kind: `cargo` · methodId `geliver` - capabilities: `rateShopping`, `labelFormats: PDF/JPG`, `tracking: both`, `cod`, `returnLabel`, `cancel`, `testMode`, `senderProfile` - scopes: `orders:write` - PII: name, phone, address, city — Kargo etiketi oluşturmak için alıcı adı, telefonu ve teslimat adresi Geliver'e iletilir. - admin panels: `order.detail.ship` · actions: `sender-address` ## Secrets | key | label (TR) | required | sandbox prefix | |---|---|---|---| | `cargo.geliver.api_token` | Geliver API Anahtarı | yes | — | Secrets are write-only and owner-entered — see [Tokens](/reference/tokens). ## Provider-driven inbound Webhooks and jobs are the platform's to ingest and schedule — **never callable by agents**. | kind | name | note | |---|---|---| | webhook | `cargo` (`/v1/ext/mozaik.geliver/wh/cargo/{storeId}`) | provider-driven ingestion (cargo_events); not callable by agents | | job | `track_poll` | hourly platform job; not callable by agents | ## Config schema ```json { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "mode": { "default": "test", "type": "string", "const": "test" }, "senderAddressId": { "type": "string", "maxLength": 64 }, "defaultPackage": { "default": { "weightGr": 1000, "lengthCm": 20, "widthCm": 15, "heightCm": 10 }, "type": "object", "properties": { "weightGr": { "default": 1000, "type": "integer", "minimum": 100, "maximum": 50000 }, "lengthCm": { "default": 20, "type": "integer", "minimum": 1, "maximum": 150 }, "widthCm": { "default": 15, "type": "integer", "minimum": 1, "maximum": 150 }, "heightCm": { "default": 10, "type": "integer", "minimum": 1, "maximum": 150 } }, "additionalProperties": false }, "offerPolicy": { "default": "merchant_picks", "type": "string", "enum": [ "merchant_picks", "cheapest" ] }, "labelFormat": { "default": "PDF", "type": "string", "enum": [ "PDF", "JPG" ] }, "webhookId": { "type": "string", "maxLength": 64 } }, "additionalProperties": false } ``` ## For agents Cargo through the merchant's Geliver account: quote offers, book shipments, fetch labels, track. The sender address must be registered at Geliver before the first booking. ### Setup 1. **Install** — [`extension.install`](/reference/commands/extension.install) with `{"extensionId": "mozaik.geliver"}` and the consent block. Consent includes buyer name/phone/address flowing to Geliver for labels. 2. **Secret** — the owner enters `cargo.geliver.api_token` in the admin panel (agents cannot set secrets). Owner-entered; test-mode tokens only until the platform unlocks live cargo (M7). 3. **Action** — run op `sender-address` via [`ext.cargo.sender`](/reference/routes/ext.cargo.sender). Register the pickup/sender profile — agents call the sender-address op, owners use the admin dialog. 4. **Enable** — [`extension.enable`](/reference/commands/extension.enable). 5. **Verify** — run op `offers` via [`orders.cargo.offers`](/reference/routes/orders.cargo.offers). Quote offers on a test order; a carrier list proves the token + sender profile. ### Operations | op | via | effects | proposal-only | requires | |---|---|---|---|---| | `book` | [`orders.cargo.book`](/reference/routes/orders.cargo.book) | `external` | ✓ | enabled · capability `rateShopping` | | `label` | [`orders.shipment.label`](/reference/routes/orders.shipment.label) | `external` | | enabled · capability `labelFormats` | | `offers` | [`orders.cargo.offers`](/reference/routes/orders.cargo.offers) | `external` | | enabled · capability `rateShopping` | | `sender-address` | [`ext.cargo.sender`](/reference/routes/ext.cargo.sender) | `external` | ✓ | installed (enable not required) · secret `cargo.geliver.api_token` | | `track` | [`orders.shipment.track`](/reference/routes/orders.shipment.track) | `external` | ✓ | enabled · capability `tracking` | [`extensions.ops.get`](/reference/routes/extensions.ops.get) (`GET /v1/extensions/mozaik.geliver/ops`) returns this table with live readiness — exactly what blocks each op right now (`missing_secret:`, `missing_config:`, `not_enabled`, …). ### Lifecycle [`extension.install`](/reference/commands/extension.install) → [`extension.configure`](/reference/commands/extension.configure) → [`extension.enable`](/reference/commands/extension.enable) → [`extension.disable`](/reference/commands/extension.disable) → [`extension.uninstall`](/reference/commands/extension.uninstall)