---
title: "Associate Account Partner"
method: POST
path: "/v2/ap-portals/accounts/{account_id}/associate"
tags: ["ap-portals"]
---

# Associate Account Partner

`POST /v2/ap-portals/accounts/{account_id}/associate`

## Request

- Base URL: `https://api.stuut.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.stuut.ai/v2/ap-portals/accounts/{account_id}/associate`
- Auth: HTTP bearer

Associate partners

Tie an AP-portal login to one or more customer partners. Creates the ``ap_portal``
config row for each partner that has none yet; otherwise repoints its login to this
account. Required before ``sweep`` will enqueue a sweep for that partner. All-or-nothing:
an unknown partner id fails the whole request.

## Path parameters

- `account_id` string, required

## Request body

- AssociatePortalRequest: Tie one or more customer partners to an AP-portal login. Upserts the ``ap_portal`` config row per partner: creates it if the partner has none yet, otherwise repoints its login to this account. ``name`` / ``customer_name`` default to each partner's own name, so a shared override here applies identically across every partner in the list.
  - `partner_ids` string[], required
  - `name` string, nullable: AP portal display name. Defaults to each partner's name.
  - `customer_name` string, nullable: Buyer/customer name as shown in the portal. Defaults to each partner's name.
  - `customer_identifier` string, nullable: Optional buyer/customer identifier used by some providers.
  - `submission_profile` string, nullable: Deprecated legacy submission profile key; not required. Use buyer form revisions for invoice preparation. Retained for compatibility: omit to leave an existing portal's legacy profile unchanged; send null to clear it.
  - `submission_config` object, nullable: Per-buyer supplier identity ids for submit (address / legal-entity picks). Omit to leave an existing portal's config unchanged; send null to clear it. Unknown or missing keys are rejected.
  - `is_enabled` boolean, nullable: Whether the portal config is active. Defaults to True on create; omit on re-associate to leave an existing portal's enabled state unchanged.
  - `is_invoice_submit_enabled` boolean, nullable: Whether invoices for this buyer may be sent live. Defaults to False on create; omit on re-associate to leave an existing portal unchanged. This is separate from is_enabled: while this is off, the buyer still supports previews and dry runs.

## Response `200`

Successful Response

- APPortalItem[]
  - `id` string, required
  - `buyer_id` string, nullable, required
  - `partner_id` string, required
  - `account_id` string, nullable, required
  - `account_key` string, nullable, required
  - `provider` 'kehe' | 'taulia' | 'coupa' | 'ariba' | 'meijer' | 'kroger' | 'walgreens' | 'albertsons' | 'target' | 'heb' | 'heb_sidm' | 'c_and_s' | 'walmart' | 'walmart_highradius' | 'cvs' | 'cvs_sap' | 'cvs_image_silo' | 'kroger_supplier_connect' | 'kroger_claimtrax' | 'kroger_verigon' | 'servicetitan' | 'sandbox' | 'generic', required: Supported AP Portal providers.
  - `name` string, nullable, required
  - `customer_name` string, nullable, required
  - `customer_identifier` string, nullable, required
  - `is_enabled` boolean, required
  - `is_invoice_submit_enabled` boolean, required
  - `status` 'active' | 'paused', required: Status of an AP portal.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/stuut/apis/stuut-api.md) - [All operations](https://skmtc.dev/stuut/apis/stuut-api/llms.txt) - [OpenAPI document](https://skmtc.dev/stuut/apis/stuut-api/revisions/ff0ad16a55ff?raw)
