---
title: "Submit Portal Config"
method: POST
path: "/api/integrazu/portal-config"
tags: ["Portal Configuration"]
---

# Submit Portal Config

`POST /api/integrazu/portal-config`

Submit or update portal credentials for a brand+portal combination.

Payload from PortalConfigDialog.js:
{
    "brand_id": 1,
    "pv_id": 10,  (optional)
    "platform_slug": "standvirtual",
    "credentials": { "client_id": "...", "client_secret": "...", ... }
}

A support ticket is opened for every submission so the work is tracked
rather than living only in an email — see app/services/portal_config_tickets.

GOVERNING PRINCIPLE: the credentials are the product, the ticket is the
alert. Nothing in the alerting path may prevent the credentials from being
stored, so every lookup that can fail (PV ownership, company name, ticket
creation) lives AFTER the upsert and is individually guarded. The response
is a 200 with `ticket_id: null` when the alert degrades — never a 4xx/5xx
on a submission that succeeded.

## Headers

- `x-api-token` string, nullable

## Request body

- object

## Response `200`

Successful Response

- unknown

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/multigest/apis/multigest-protected-api.md) · [All operations](https://skmtc.dev/multigest/apis/multigest-protected-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/multigest/multigest-protected-api/revisions/4b44eb76b3ee/schema)
