Pricing, quote validity and billing

API contract 2026-10-09.1 exposes settlement semantics explicitly. Customer-visible website prices do not expire because time passes; commercial availability and final invoice settlement are separate concepts.

Gridex Developers · Documentation 2026-10-12.1 · Response schema 2026-10-09.1

Gridex API

Build electricity retail websites, customer portals and backend integrations on one authoritative API. Gridex provides published offers, pricing, legal documents, customer and contract lifecycle state, customer portal data and signed webhooks. Your integration stays focused on the customer experience.

You do not need to match the latest documentation revision exactly to use a supported API version. Documentation updates do not change the business response schema or require an integration upgrade. Earlier supported V1 response profiles remain available; see the compatibility policy and migration guide. Independent Staff onboarding uses its own schema, 2026-10-05.2.

The API is available for integration development. Production use requires the deployed API and database prerequisites plus an active API credential for your organization, the required scopes and customer identity linking. Verify authenticated reads, writes, audit attribution and safe retries for the intended organization before go-live. A published specification or passing source checks do not by themselves qualify that organization's live business flow.

Partner API
https://app.gridex.se/api/partner/v1

Version 2026-08-17.1
OpenAPI
/api/partner/v1/openapi.json

1. Responsibilities

The integration boundary is deliberate: your application owns presentation and verified customer input; Gridex owns the authoritative electricity-retail business state and downstream processing.

Gridex platform

  • Associates each API key with the correct organization, configuration and permissions.
  • Publishes the offers, price options, legal documents and acceptance requirements available to customers.
  • Resolves price areas and creates authoritative quotes, including applicable fees, markups and pricing rules.
  • Validates applications and prevents duplicate business writes through idempotent processing.
  • Creates and maintains the authoritative customer, site, contract, legal-acceptance and signature records.
  • Assigns public application, customer and contract numbers and returns stable public references.
  • Runs the configured supplier-switch and facility-information lifecycle, including downstream market communication where required.
  • Tracks confirmation delivery, customer-visible lifecycle status, metering data and invoice data exposed by the enabled services.

Your integration

  • Builds the website or application UI and keeps the Gridex API key on a trusted server only.
  • Authenticates the end customer and sends a stable, verified customer identity from the server session.
  • Displays Gridex-provided offer, quote and legal data without locally changing the authoritative calculation or document versions.
  • Collects customer and site details, exact legal acceptance evidence and power-of-attorney evidence when required.
  • Sends a stable Idempotency-Key for every write and stores the returned public application number.
  • Uses documented response fields to drive the UI instead of interpreting internal processing states.
  • Verifies webhook signatures, rejects stale requests and deduplicates deliveries before processing events.

2. Authentication

Use the API key only from your backend. Gridex identifies the correct organization from the credential, so requests do not need internal database identifiers or organization-selection fields.

GRIDEX_API_KEY=gridex_live_xxxxxxxxx

Authorization: Bearer $GRIDEX_API_KEY
Never expose GRIDEX_API_KEY in browser JavaScript, a mobile application, logs, analytics events or client-visible environment variables.

3. Website checkout

A production checkout should use Gridex as the source for the offer, price area, quote and legal documents. Submit the customer application only after the customer has accepted the exact published versions shown in the UI.

  1. Retrieve published offers with GET /website/public-contracts.
  2. Resolve the customer’s Swedish price area with POST /website/energy-area/resolve.
  3. Create the authoritative quote with POST /website/quote and validate it before final submission.
  4. Retrieve the exact legal bundle with GET /website/legal-bundle and display the required documents.
  5. Collect the customer’s explicit acceptance evidence and power of attorney when required.
  6. Submit the application with one stable Idempotency-Key.

Submit an application

POST https://app.gridex.se/api/v1/website/customer-applications
Authorization: Bearer $GRIDEX_API_KEY
Idempotency-Key: checkout_01JEXAMPLE000000000000000
Content-Type: application/json

{
  "external_customer_id": "customer_12345",
  "auth_user_id": "4f6d1e3a-1e84-4c3f-97be-03ac98f21916",
  "customer_portal_user_id": "4f6d1e3a-1e84-4c3f-97be-03ac98f21916",
  "offer_reference": "offer_variable_monthly",
  "quote_reference": "quote_01JEXAMPLE000000000000000",
  "price_option_reference": "variable_monthly_standard",
  "invoice_delivery_method": "email",
  "selected_component_references": [],
  "site_count": 1,
  "legal_bundle_version": "2026-08-19",
  "legal_acceptances": [
    {
      "requirement_code": "agreement",
      "document_reference": "legal_customer_document_example",
      "document_version": "3",
      "document_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
      "accepted": true,
      "accepted_at": "2026-08-19T10:00:00.000Z"
    },
    {
      "requirement_code": "power_of_attorney",
      "document_reference": "legal_customer_document_poa_example",
      "document_version": "2",
      "document_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
      "accepted": true,
      "accepted_at": "2026-08-19T10:00:00.000Z"
    }
  ],
  "customer": {
    "customer_type": "private",
    "first_name": "Anna",
    "last_name": "Andersson",
    "personal_number": "19900101-1234",
    "email": "anna@example.se",
    "phone": "+46701234567"
  },
  "site": {
    "street": "Example Street 1",
    "postal_code": "11122",
    "city": "Stockholm",
    "country": "SE",
    "annual_consumption_kwh": 4500
  },
  "powerOfAttorney": {
    "accepted": true,
    "scope": ["supplier_switch", "facility_information_lookup"],
    "signerName": "Anna Andersson",
    "signerIdentityNumber": "19900101-1234",
    "method": "website_acceptance",
    "acceptedAt": "2026-08-19T10:00:00.000Z",
    "textVersionId": "00000000-0000-4000-8000-000000000001",
    "ipAddress": "192.0.2.10",
    "userAgent": "<customer browser user agent>"
  }
}

For automated power-of-attorney email, record the customer’s IP at acceptance and send it as powerOfAttorney.ipAddress from your trusted backend, with the original acceptedAt. Gridex creates a stable verification number and archives the accepted text, scopes and evidence as a PDF, with the verification number on every page. The IP of your API server is recorded separately. A form click or method: bankid does not prove a verified BankID signature. BankID is optional; missing evidence blocks external email until completed. Organization users can retrieve their PDFs in OPS under Fullmakter; platform administrators can search across organizations.

The legal references, hashes and versions in this example are placeholders. In production, copy the exact values returned by the legal-bundle endpoint. Do not generate or modify them locally.

Successful checkout response

The immediate customer-facing checkout result is returned in data.checkout. Use that object for the post-submit UI instead of deriving success from internal processing states.

{
  "data": {
    "application_number": "APP-2026-000123",
    "customer_number": "DX-100123",
    "contract_number": "AVT-100123",
    "contract_status": "signed",
    "signed_at": "2026-08-19T10:00:01.000Z",
    "checkout": {
      "outcome": "agreement_signed",
      "thank_you_ready": true,
      "page_state": "success",
      "customer_action_required": false,
      "application": {
        "application_number": "APP-2026-000123",
        "status": "accepted"
      },
      "agreement": {
        "status": "signed",
        "contract_number": "AVT-100123",
        "signed_at": "2026-08-19T10:00:01.000Z",
        "withdrawal_deadline_at": "2026-09-02T21:59:59.999999Z",
        "signature_snapshot_sha256": "<sha256>"
      },
      "confirmation_email": {
        "expected": true,
        "status": "pending"
      },
      "status_path": "/api/v1/website/customer-applications/APP-2026-000123"
    }
  },
  "request_id": "1eb19095-9fab-4c38-b6db-d28bd0e924d9",
  "contract_schema_version": "2026-10-09.1"
}

These illustrative timestamps show the deadline rule for newly signed qualifying private distance agreements: the end of the fourteenth calendar day after acceptance in Europe/Stockholm. Use the stored deadline returned by Gridex. Previously frozen agreements retain their recorded deadline; confirmation delivery does not change it.

UI rule: show the final signed-agreement success state only when checkout.thank_you_ready === true.
success: the agreement is signed and no additional customer action is required.
success_action_required: the agreement is signed, but additional customer information is needed for downstream processing.
action_required: customer action is required before processing can continue.
processing: the application is accepted for processing; do not present it as a completed signed agreement unless the agreement fields confirm that state.

4. Status and lifecycle

Store application_number after a successful submission. Use the application status endpoint after redirects, page refreshes and later visits. It returns the authoritative customer-facing state of the agreement and downstream processing.

GET https://app.gridex.se/api/v1/website/customer-applications/APP-2026-000123
Authorization: Bearer $GRIDEX_API_KEY

{
  "data": {
    "application_number": "APP-2026-000123",
    "status": "processing",
    "contract_number": "AVT-100123",
    "contract_status": "signed",
    "signed_at": "2026-08-19T10:00:01.000Z",
    "communication": {
      "pending": false,
      "sent": [
        { "event_type": "contract.confirmation_sent", "status": "delivered" }
      ]
    },
    "checkout": {
      "thank_you_ready": true,
      "page_state": "success",
      "confirmation_email": { "expected": true, "status": "delivered" }
    }
  },
  "request_id": "1eb19095-9fab-4c38-b6db-d28bd0e924d9",
  "contract_schema_version": "2026-10-09.1"
}

Agreement state and message-delivery state are separate. A confirmation email can still be queued while the agreement is already validly signed. Treat the documented delivery status as authoritative instead of assuming that an email was delivered because the agreement succeeded.

5. Customer Portal API

The Customer Portal API exposes only data belonging to the verified linked customer identity. Use granular scopes and request only the capabilities your portal needs. Available resources include profile data, contracts, sites, invoices, metering values, documents, legal acceptances, powers of attorney, events and notifications.

For customer sync, authenticated_user_reference is the authenticated account subject from your organization's login system. It must resolve an already linked active account in the API credential's organization. An unlinked, disabled or other-organization subject does not grant access or create a link.

Support cases and attachments

Your support page can open cases, exchange messages and attach files with the explicit customer_support.read and customer_support.write scopes. Your staff handle the same cases in OPS, including cases that continue over the phone. Only customer-visible messages and released files are returned; internal notes and staff-only files never are. Upload a file as the raw request body (application/pdf, image/png or image/jpeg, at most 4 MB) with an Idempotency-Key. Every file is quarantined and released only after a content check; rejected files return 422 attachment_rejected and are never served.

Verified customer login (optional)

Your organization can let Gridex verify the end customer's own login (OPS → Inställningar → Kundinloggning). Your server then forwards the login's signed assertion in x-gridex-customer-assertion: a compact JWS (RS256, PS256 or ES256) with your organization's iss and aud, sub = the linked portal user id, exp at most 15 minutes after iat and a unique jti. In report mode a missing or invalid assertion is only logged; when verification is required the API returns 403 customer_assertion_required or 403 customer_assertion_invalid. Organizations without a configuration are unaffected.

Archived powers of attorney: PDF and verification

The independent additive archive contract always requires a fresh, verified x-gridex-customer-assertion, an active linked customer in the API key's organization, and BOTH customer_power_of_attorney.read AND customer_documents.read. This requirement also applies in report mode; a missing provider configuration or an unverified assertion does not authorize archive access. Keep the API key and assertion on your trusted server and expose an authenticated download through your own portal.

List existing archives with GET /customer/powers-of-attorney/evidence. Discovery status archived_unverified describes metadata only. Use the returned verification reference with GET /customer/powers-of-attorney/evidence/{verificationReference}?format=json to verify the actual original bytes, or format=pdf to download the verified PDF (at most 15 MiB). The optional sha256 query compares your supplied digest; an incorrect digest returns submitted_sha256_matches: false in the JSON response without changing the archive. These GET requests never generate a PDF or create consent. Missing original IP/time evidence remains missing; pdf_signature_validation: not_performed does not claim cryptographic PDF-signature or BankID validation.

Full schemas, limits and error responses: current POA archive OpenAPI or pinned release 2026-10-19.1. Existing Website and Customer Portal contract releases are unchanged.

MethodEndpointRequired scopePurpose
GET/api/v1/customer/portal-bundlecustomer_profile.read AND customer_sites.read AND customer_contracts.read AND customer_invoices.read AND customer_metering.read AND customer_legal.read AND customer_events.read AND customer_documents.read AND customer_notifications.read AND customer_power_of_attorney.readRetrieve the combined customer portal read model for a verified customer identity.
POST/api/v1/customer/portal-bundlecustomer_profile.read AND customer_sites.read AND customer_contracts.read AND customer_invoices.read AND customer_metering.read AND customer_legal.read AND customer_events.read AND customer_documents.read AND customer_notifications.read AND customer_power_of_attorney.readRetrieve the combined customer portal read model for a verified customer identity.
POST/api/v1/customer-portal/synccustomer_sync.writeLink or verify an external customer portal identity. Idempotency-Key is required.
POST/api/v1/customer/synccustomer_sync.writeSubmit customer data required to complete an existing customer record or process. Idempotency-Key is required.
GET/api/v1/customer/mecustomer_profile.readRetrieve the linked customer profile.
GET/api/v1/customer/contractscustomer_contracts.readRetrieve the customer’s electricity contracts.
GET/api/v1/customer/sitescustomer_sites.readRetrieve the customer’s electricity sites.
GET/api/v1/customer/invoicescustomer_invoices.readRetrieve the customer’s invoices.
GET/api/v1/customer/invoices/[id]customer_invoices.readRetrieve a single customer invoice.
GET/api/v1/customer/metering-valuescustomer_metering.readRetrieve metering values available to the customer.
GET/api/v1/customer/eventscustomer_events.readRetrieve customer-visible events.
GET/api/v1/customer/documentscustomer_documents.readRetrieve customer documents without exposing internal storage paths.
GET/api/v1/customer/legal-acceptancescustomer_legal.readRetrieve the customer’s recorded legal acceptances.
GET/api/v1/customer/powers-of-attorney/evidencecustomer_power_of_attorney.read AND customer_documents.readList existing customer POA archives; requires a linked portal account and fresh verified customer assertion. Contract: /api/v1/openapi/poa-archive-v1.json.
GET/api/v1/customer/powers-of-attorney/evidence/[verificationReference]customer_power_of_attorney.read AND customer_documents.readVerify or download an existing customer POA PDF by stored reference after checking its actual bytes; requires a linked portal account and fresh verified assertion. Contract: /api/v1/openapi/poa-archive-v1.json.
GET/api/v1/customer/powers-of-attorneycustomer_power_of_attorney.readRetrieve the customer’s powers of attorney.
GET/api/v1/customer/notificationscustomer_notifications.readRetrieve customer notifications.
POST/api/v1/customer/notifications/readcustomer_notifications.writeMark customer notifications as read. Idempotency-Key is required.
POST/api/v1/customer/profile-updatecustomer_contact.write OR customer_facility_data.writeSubmit a customer contact or site-address update. Idempotency-Key is required.
GET/api/v1/customer/support/casescustomer_support.readList the customer’s support cases.
POST/api/v1/customer/support/casescustomer_support.writeOpen a support case with the customer’s first message. Idempotency-Key is required.
GET/api/v1/customer/support/cases/[reference]customer_support.readRetrieve a support case with its customer-visible messages.
GET/api/v1/customer/support/cases/[reference]/messagescustomer_support.readList customer-visible messages of a support case.
POST/api/v1/customer/support/cases/[reference]/messagescustomer_support.writeAdd a customer message to an open support case. Idempotency-Key is required.
GET/api/v1/customer/support/cases/[reference]/attachmentscustomer_support.readList released, customer-visible attachments of a support case.
POST/api/v1/customer/support/cases/[reference]/attachmentscustomer_support.writeUpload a customer attachment (raw PDF, PNG or JPEG body) to an open support case; content-checked before release. Idempotency-Key is required.
GET/api/v1/customer/support/cases/[reference]/attachments/[attachmentReference]customer_support.readDownload a released, customer-visible attachment; the SHA-256 is re-verified on every download.
POST/api/v1/customer/move-outcustomer_facility_data.writeSubmit a customer move-out request. Idempotency-Key is required.

6. Partner API

The Partner API is a streamlined backend-to-backend interface for integrations that need to create customers, sites and contracts, retrieve operational data or subscribe to contract-status changes. Gridex manages the account configuration and product mapping outside the API; the partner sends business data and uses the public references returned in responses.

Create a contract

POST https://app.gridex.se/api/partner/v1/contract
Authorization: Bearer $GRIDEX_API_KEY
Idempotency-Key: partner_contract_01JEXAMPLE000000000
Content-Type: application/json

{
  "customer": {
    "first_name": "Anna",
    "last_name": "Andersson",
    "soc_id": "19900101-1234",
    "customer_type": "PRIVATE",
    "email": "anna@example.se"
  },
  "site": {
    "address": "Example Street 1",
    "zip_code": "11122",
    "city": "Stockholm",
    "country": "SE",
    "site_electricity_type": "CONSUMPTION"
  },
  "power_of_attorney": {
    "poa_type": "WEB",
    "transaction_type": "SWITCH",
    "file_base64": "<pdf_base64>",
    "file_extension": "pdf"
  }
}

Create a webhook subscription

POST https://app.gridex.se/api/partner/v1/webhook/subscription
Authorization: Bearer $GRIDEX_API_KEY
Idempotency-Key: partner_webhook_01JEXAMPLE000000000
Content-Type: application/json

{
  "webhook_event": "CONTRACT_STATUS_CHANGE",
  "target_url": "https://partner.example.com/webhooks/gridex",
  "notification_email": "integration@example.com",
  "signing_secret": "<at-least-32-random-characters>"
}
MethodEndpointRequired scopePurpose
POST/contractBearer API keyCreate contract
POST/customerBearer API keyCreate customer
POST/customer/{customer_id}/siteBearer API keyCreate site
GET/customer/{customer_id}/site/{site_id}/powerofattorneyBearer API keyGet power of attorney
POST/customer/{customer_id}/site/{site_id}/powerofattorneyBearer API keyUpload power of attorney
GET/contract/{contract_id}/stateBearer API keyGet contract state
GET/customer/{customer_id}Bearer API keyGet customer
GET/customer/{customer_id}/site/{site_id}Bearer API keyGet site
GET/customer/{customer_id}/site/{site_id}/invoiceBearer API keyList invoices for site
GET/invoice/{invoice_id}Bearer API keyGet invoice
GET/invoice/{invoice_id}/pdfBearer API keyGet invoice PDF
GET/customer/{customer_id}/site/{site_id}/measurementBearer API keyGet measurements
POST/webhook/subscriptionBearer API keyCreate webhook subscription

7. Webhooks

Webhooks are signed change notifications. Verify the HMAC-SHA256 signature against the raw request body and timestamp, reject stale timestamps, and deduplicate by event or delivery identifier before applying side effects. When you need the latest complete state, use the webhook as a signal and retrieve the corresponding resource from Gridex.

POST https://partner.example.com/webhooks/gridex
X-Gridex-Timestamp: 1787130000
X-Gridex-Signature: sha256=<hmac_sha256>
X-Gridex-Event-ID: event_...
X-Gridex-Delivery-ID: delivery_...
Content-Type: application/json

{
  "event_id": "event_...",
  "event_type": "customer_application.status_changed",
  "created_at": "2026-08-19T10:01:00.000Z",
  "aggregate": {
    "type": "website_customer_application",
    "reference": "APP-2026-000123"
  },
  "data": {
    "application_number": "APP-2026-000123",
    "status": "processing",
    "previous_status": "accepted"
  },
  "contract_schema_version": "2026-10-09.1"
}

A temporary failure in your receiver does not change the underlying Gridex business event. Webhook delivery is retried independently according to the configured delivery policy.

8. Reliability and performance

Idempotency: every write that requires Idempotency-Key must reuse the same key only when retrying the exact same business request.

Caching: use ETag and If-None-Match for published offer feeds to avoid unnecessary transfers.

Checkout: use the POST response directly for the immediate success state instead of issuing a redundant status request.

Lifecycle updates: prefer signed webhooks when configured; use polling as a fallback with exponential backoff.

HTTP: reuse connections where your runtime supports it and keep all API calls server-to-server.

Observability: log the returned request_id with your own correlation identifier so support cases can be traced without exposing secrets or personal data.

9. Errors and retries

API errors use one structured envelope. Inspect error.code, error.retryable, error.field and error.blockers rather than parsing human-readable messages. Include request_id when contacting Gridex support about a failed request.

{
  "error": {
    "code": "validation_error",
    "message": "The request could not be validated.",
    "retryable": false,
    "field": "customer.email",
    "blockers": []
  },
  "request_id": "1eb19095-9fab-4c38-b6db-d28bd0e924d9",
  "correlation_id": "1eb19095-9fab-4c38-b6db-d28bd0e924d9",
  "contract_schema_version": "2026-10-09.1"
}

10. Endpoint reference

This table shows the current integration endpoints. Historical immutable OpenAPI releases and internal diagnostics are intentionally omitted from the human-readable guide.

MethodEndpointRequired scopePurpose
GET/api/v1/openapi/poa-archive-v1.jsonPublicIndependent additive customer POA archive and verification contract.
GET/api/v1/openapi/staff-onboarding-v1.jsonPublicIndependent additive staff onboarding contract; separate from the frozen Staff API release.
POST/api/v1/staff-onboarding/invitations/acceptstaff_users.writeExplicitly accept the registered client invitation with verified independent tenant Auth and a purpose-bound single-use signed assertion. Idempotency-Key is required.
POST/api/v1/staff-onboarding/identity/resolvestaff_users.readResolve an existing local-to-central staff identity binding using registered independent tenant Auth and a purpose-bound signed proof.
GET/api/v1/openapi/staff-v1.jsonPublicCurrent OpenAPI specification for staff integrations.
GET/api/v1/openapi/release-manifest.jsonPublicMachine-readable release manifest containing versions and SHA-256 digests for the public OpenAPI contracts.
GET/api/v1/openapi/website-integration-v1.jsonPublicCurrent OpenAPI specification for website integrations.
GET/api/v1/openapi/customer-portal-v1.jsonPublicCurrent OpenAPI specification for customer portal integrations.
GET/api/v1/integration/contextintegration_context.readVerify the authenticated API client and retrieve its public integration context.
GET/api/v1/public-contractsapi_contracts.readRetrieve contracts published to the general API channel.
GET/api/v1/website/public-contractswebsite_contracts.readRetrieve published electricity offers with complete pricing inputs and display rules.
GET/api/v1/website/portfolio-priceswebsite_contracts.readRetrieve the public pricing method and sanitized historical final settlements for a published portfolio offer.
POST/api/v1/website/market-price/currentwebsite_market_prices.readRetrieve the current normalized market price for a Swedish price area.
POST/api/v1/website/quotewebsite_quotes.writeCreate an authoritative checkout quote from a published offer. Fixed products lock the energy price; market, portfolio and mixed products return indicative checkout evidence for the accepted pricing model. Idempotency-Key is required.
POST/api/v1/website/quote/validatewebsite_quotes.validateValidate the immutable accepted quote and commercial identity. Elapsed wall-clock time alone does not invalidate an issued website quote.
POST/api/v1/website/energy-area/resolvewebsite_energy_area.resolveResolve the Swedish price area (SE1-SE4) for the supplied address or postal code.
GET/api/v1/website/switch-statuswebsite_switch_status.readRetrieve the current supplier-switch status using the public application number.
GET/api/v1/website/legal-bundlewebsite_legal.read OR website_contracts.readRetrieve the exact published legal documents and versions required for customer acceptance.
POST/api/v1/website/customer-applicationswebsite_applications.writeSubmit a customer application with the exact accepted offer, quote, legal evidence and customer data. Idempotency-Key is required.
GET/api/v1/website/customer-applications/[application_number]website_switch_status.readRetrieve the authoritative status of an accepted customer application and its downstream processing.
POST/api/v1/website/customer-eventswebsite_events.writeSubmit a customer event from a website or customer portal. Idempotency-Key is required.
POST/api/v1/eventswebsite_events.writeSubmit a customer-facing integration event. Idempotency-Key is required.
GET/api/v1/eventsevents.readRetrieve domain events available to the authenticated organization.
GET/api/v1/staff/usersstaff_users.readList staff accounts with their membership status.
POST/api/v1/staff/usersstaff_users.writeInvite staff to the organization within the acting staff role ceiling. Idempotency-Key is required.
PATCH/api/v1/staff/users/[id]staff_users.writeChange a staff role while preserving the final active administrator. Idempotency-Key is required.
POST/api/v1/staff/users/[id]/disablestaff_users.writeDisable staff while preventing self disable and loss of the final administrator. Idempotency-Key is required.
POST/api/v1/staff/users/[id]/enablestaff_users.writeReactivate a disabled staff membership. Idempotency-Key is required.
GET/api/v1/staff/rolesstaff_users.readList staff roles and whether the acting staff can assign each role.
GET/api/v1/staff/customersstaff_customers.readSearch and page customers belonging to the authenticated organization.
GET/api/v1/staff/customers/[ref]staff_customers.readRetrieve a customer with masked identity numbers and explicit public fields.
PATCH/api/v1/staff/customers/[ref]/contactstaff_customers.writeUpdate customer contact fields using an expected version. Idempotency-Key is required.
POST/api/v1/staff/customers/[ref]/identity-changestaff_customers.writeRequest a customer identity change with customer approval when required. Idempotency-Key is required.
GET/api/v1/staff/casesstaff_cases.readList customer cases available to staff in the authenticated organization.
POST/api/v1/staff/casesstaff_cases.writeCreate a customer support case as the acting staff. Idempotency-Key is required.
GET/api/v1/staff/cases/[reference]staff_cases.readRetrieve a customer case including staff visible events and attachments.
POST/api/v1/staff/cases/[reference]/messagesstaff_cases.writeReply to a customer through the existing support conversation. Idempotency-Key is required.
POST/api/v1/staff/cases/[reference]/notesstaff_cases.writeAdd an internal staff note to a customer case. Idempotency-Key is required.
POST/api/v1/staff/cases/[reference]/phone-interactionsstaff_cases.writeRecord a phone interaction and its customer verification evidence. Idempotency-Key is required.
PATCH/api/v1/staff/cases/[reference]/statusstaff_cases.writeChange the status of a customer case. Idempotency-Key is required.
PATCH/api/v1/staff/cases/[reference]/assigneestaff_cases.writeAssign a customer case to active staff in the same organization. Idempotency-Key is required.
GET/api/v1/staff/cases/[reference]/eventsstaff_cases.readList staff visible case events with a case bound continuation cursor.
GET/api/v1/staff/cases/[reference]/attachmentsstaff_cases.readList staff visible attachments of a customer case.
POST/api/v1/staff/cases/[reference]/attachmentsstaff_cases.writeUpload a staff attachment for content inspection before release. Idempotency-Key is required.
GET/api/v1/staff/cases/[reference]/attachments/[attachmentReference]/filestaff_cases.readDownload a released staff visible attachment with its hash verified.