---
title: "List the integrations of an organization"
method: GET
path: "/organizations/{id_organization}/integrations"
tags: ["integrations"]
---

# List the integrations of an organization

`GET /organizations/{id_organization}/integrations`

## Request

- Base URL: `https://api.planvortex.com/v1.0.0`
- URL: `https://api.planvortex.com/v1.0.0/organizations/{id_organization}/integrations`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (client credentials, token URL `https://api.planvortex.com/v1.0.0/oauth/token`)

Requires the `integrations:read` permission (`client_organization_integrations:read` for apps).

## Path parameters

- `id_organization` string, required

## Query parameters

- `provider` 'google_drive' | 'rss' | 'woocommerce'
- `offset` integer
- `limit` integer

## Response `200`

Successful operation

- object
  - `integrations` IntegrationsIntegration[], required
    - `_id` string, required
    - `id_organization` string, required
    - `id_client` string, required
    - `provider` 'google_drive' | 'rss' | 'woocommerce', required
    - `name` string, required: The Google account, the feed title, or the store's site name.
    - `external_identifier` string: The Google account email, the feed URL, or the store URL.
    - `config` IntegrationsIntegrationConfig, required: What `config` holds, per provider. `google_drive`: nothing. `rss`: the feed settings. `woocommerce`: how to reach the store, which the server detects when connecting. None of it is a secret.
      - `url` string: `rss`: the feed. `woocommerce`: the store, as it was resolved when connecting (after its own redirects, which from then on are never followed). **A store's `url` cannot be changed with `PUT`** (`2220`): it decides which server receives the stored key. Changing store is reconnecting.
      - `id_accounts` string[]: `rss`.
      - `publication_type` string: `rss`.
      - `template` string: `rss`.
      - `auto_publish` boolean: `rss`.
      - `import_image` boolean: `rss`.
      - `seen_guids` string[]: `rss`. Entries already processed (last 200, FIFO). Owned by the job: filled at connection time with everything the feed already had, so the back catalogue is never published.
      - `last_checked` string, date-time: `rss`.
      - `api_base` 'wp-json' | 'rest_route': `woocommerce`. Where the store's REST API answers: `wp-json` (`/wp-json/wc/v3/…`) or `rest_route` (`/?rest_route=/wc/v3/…`), the fallback for stores with plain permalinks. A `rest_route` store cannot use the approval button (`2216`).
      - `auth_mode` 'basic' | 'query': `woocommerce`. How the key travels: `basic` (the `Authorization` header) or `query` (in the URL, only for hostings that drop that header). Detected when connecting.
      - `key_ending` string: `woocommerce`. The last 7 characters of the consumer key, which is what WooCommerce shows in its key list (WooCommerce → Settings → Advanced → REST API). Disconnecting cannot revoke the key: this is how the user finds which one to delete there.
      - `currency` string: `woocommerce`. The store currency, when the key could read it (it needs a shop manager's key). Only used for a product that comes without `price_html`.
      - `tax_location_missing` boolean: `woocommerce`. **true when the store's API gives prices WITHOUT tax, labelled as tax included.** It happens with the default customer location set to geolocate (or to no location), prices entered without tax and tax based on the customer's address: an API request has no customer, so WooCommerce has nowhere to charge tax, and `price_html` reads "20,00 € IVA incluido" where the shop charges 24,20 €. While it is true, the store's **taxable products come back without a price** rather than with a wrong one; products with no tax keep theirs. It is checked when connecting, so after fixing the setting (WooCommerce → Settings → General → Default customer location → Shop country/region) the store has to be reconnected. Always present on a store, also as `false`.
    - `enabled` boolean, required: Only enabled integrations consume plan allowance.
    - `connected` boolean, required: `error_code` is empty. It is computed on the way out, not stored: the panel needs to know whether the connection is alive, not with which credentials.
    - `error_code` integer, nullable: PlanVortex error code of the last failure (2203 token revoked, 2205 feed unreachable, 2211 the store rejected its key, 924 no publication allowance left…). **2219 is not a failure**: a store connected with the button is being checked, for a few seconds; if it stays there, the check never finished and the store has to be reconnected.
    - `last_used_date` string, date-time
    - `creation_date` string, date-time, required
  - `total` integer, required

## Other responses

- `400`: Error. Classify by `code` in the body, never by the HTTP status: every domain error travels with HTTP 400.

---

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