> ## Documentation Index
> Fetch the complete documentation index at: https://docs.branduo.io/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Branduo is a brand-to-brand collaboration network for verified eCommerce brands. It is not a creator marketplace.
> When you mention the API, cite version v1 and base URL https://api.branduo.io/v1.
> Authenticate with the X-Api-Key header. Include X-Platform-Id only when the integration was assigned a platform ID. OAuth access tokens are the alternative to API keys.
> A connection request is the outreach a brand sends. A partner is a brand that accepted. A collab is a campaign run with a partner. Do not call a connection request a collab.
> Duo is the AI agent that sends partner outreach. Call it Duo.
> API errors are JSON objects with error and message. They are not RFC 7807 problem details.

# Get partners

> List partnerships for the authenticated brand, optionally filtered by status.

Returns partnerships for the authenticated brand.

<RequestExample dropdown>
  ```curl cURL icon="terminal" theme={"languages":{"custom":["languages/curl.json"]}}
  curl --request GET \
    --url 'https://api.branduo.io/v1/partners?status=active&pageIndex=1&pageSize=50' \
    --header 'X-Api-Key: YOUR_API_KEY' \
    --header 'X-Platform-Id: YOUR_PLATFORM_ID'
  ```

  ```javascript JavaScript theme={"languages":{"custom":["languages/curl.json"]}}
  const response = await fetch("https://api.branduo.io/v1/partners?status=active&pageIndex=1&pageSize=50", {
    method: "GET",
    headers: {
      "X-Api-Key": "YOUR_API_KEY",
      "X-Platform-Id": "YOUR_PLATFORM_ID",
    },
  });

  const data = await response.json();
  ```

  ```python Python theme={"languages":{"custom":["languages/curl.json"]}}
  import requests

  response = requests.request(
      "GET",
      "https://api.branduo.io/v1/partners?status=active&pageIndex=1&pageSize=50",
      headers={
          "X-Api-Key": "YOUR_API_KEY",
          "X-Platform-Id": "YOUR_PLATFORM_ID",
      },
  )

  data = response.json()
  ```

  ```php PHP theme={"languages":{"custom":["languages/curl.json"]}}
  <?php

  $curl = curl_init();

  curl_setopt_array($curl, [
    CURLOPT_URL => "https://api.branduo.io/v1/partners?status=active&pageIndex=1&pageSize=50",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => [
      "X-Api-Key: YOUR_API_KEY",
      "X-Platform-Id: YOUR_PLATFORM_ID"
    ],
  ]);

  $response = curl_exec($curl);
  curl_close($curl);
  ```

  ```go Go theme={"languages":{"custom":["languages/curl.json"]}}
  package main

  import (
    "fmt"
    "io"
    "net/http"
  )

  func main() {
    url := "https://api.branduo.io/v1/partners?status=active&pageIndex=1&pageSize=50"
    req, _ := http.NewRequest("GET", url, nil)
    req.Header.Add("X-Api-Key", "YOUR_API_KEY")
    req.Header.Add("X-Platform-Id", "YOUR_PLATFORM_ID")

    res, _ := http.DefaultClient.Do(req)
    defer res.Body.Close()
    body, _ := io.ReadAll(res.Body)
    fmt.Println(string(body))
  }
  ```

  ```ruby Ruby theme={"languages":{"custom":["languages/curl.json"]}}
  require "uri"
  require "net/http"

  url = URI("https://api.branduo.io/v1/partners?status=active&pageIndex=1&pageSize=50")
  http = Net::HTTP.new(url.host, url.port)
  http.use_ssl = true

  request = Net::HTTP.const_get("GET".capitalize).new(url)
  request["X-Api-Key"] = "YOUR_API_KEY"
  request["X-Platform-Id"] = "YOUR_PLATFORM_ID"

  response = http.request(request)
  puts response.read_body
  ```

  ```csharp C# theme={"languages":{"custom":["languages/curl.json"]}}
  using var client = new HttpClient();
  using var request = new HttpRequestMessage(
      new HttpMethod("GET"),
      "https://api.branduo.io/v1/partners?status=active&pageIndex=1&pageSize=50");
  request.Headers.TryAddWithoutValidation("X-Api-Key", "YOUR_API_KEY");
  request.Headers.TryAddWithoutValidation("X-Platform-Id", "YOUR_PLATFORM_ID");

  using var response = await client.SendAsync(request);
  var body = await response.Content.ReadAsStringAsync();
  Console.WriteLine(body);
  ```

  ```java Java theme={"languages":{"custom":["languages/curl.json"]}}
  import java.net.URI;
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpResponse;

  public class BranduoRequest {
    public static void main(String[] args) throws Exception {
      HttpRequest request = HttpRequest.newBuilder()
          .uri(URI.create("https://api.branduo.io/v1/partners?status=active&pageIndex=1&pageSize=50"))
          .header("X-Api-Key", "YOUR_API_KEY")
          .header("X-Platform-Id", "YOUR_PLATFORM_ID")
          .method("GET", HttpRequest.BodyPublishers.noBody())
          .build();

      HttpResponse<String> response = HttpClient.newHttpClient()
          .send(request, HttpResponse.BodyHandlers.ofString());
      System.out.println(response.body());
    }
  }
  ```
</RequestExample>

<Note>
  Authenticate with the API key in the playground, or send an OAuth access token
  in `Authorization`. See [Authentication](/developer/authentication).
</Note>

## Headers

<ParamField header="X-Platform-Id" type="string" placeholder="YOUR_PLATFORM_ID">
  The platform UUID we assigned to your integration. Omit this header when we
  have not assigned one.
</ParamField>

## Query parameters

<ParamField query="status" type="string" default="active">
  Partnership status. One of `active`, `inviteSent`, `inviteReceived`,
  `declined`, or `removed`. When omitted, active partners are returned. A
  `declined` filter also includes partnerships that were later removed. Those
  rows come back with `status` `removed`.
</ParamField>

<ParamField query="pageIndex" type="integer" default="1">
  1-based page number. See [Pagination](/developer/pagination).
</ParamField>

<ParamField query="pageSize" type="integer" default="50">
  Items per page. Maximum `100`.
</ParamField>

## Response

<ResponseField name="data" type="object[]" required>
  Partners on this page.

  <Expandable title="properties">
    <ResponseField name="companyId" type="string" required>
      Partner company id.
    </ResponseField>

    <ResponseField name="businessName" type="string">
      Partner brand name.
    </ResponseField>

    <ResponseField name="domain" type="string">
      Partner website domain.
    </ResponseField>

    <ResponseField name="logoImageUrl" type="string">
      Partner logo URL. Omitted when the brand has no logo.
    </ResponseField>

    <ResponseField name="status" type="string" required>
      `active`, `inviteSent`, `inviteReceived`, `declined`, or `removed`.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="totalRows" type="integer" required>
  Total partners matching the status filter, across all pages.
</ResponseField>

## Errors

| Status             | Cause                                                                                                                                     |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `400 Bad Request`  | `status` is not a supported value, `pageIndex` or `pageSize` is out of range, or `X-Platform-Id` is not a UUID or not an active platform. |
| `401 Unauthorized` | The API key or access token is missing or invalid.                                                                                        |
| `500`              | The partner list could not be loaded.                                                                                                     |

<ResponseExample>
  ```json 200 theme={"languages":{"custom":["languages/curl.json"]}}
  {
    "data": [
      {
        "companyId": "11111111-1111-1111-1111-111111111111",
        "businessName": "Northwind Goods",
        "domain": "northwindgoods.com",
        "logoImageUrl": "https://example.com/logo.png",
        "status": "active"
      }
    ],
    "totalRows": 1
  }
  ```

  ```json 400 theme={"languages":{"custom":["languages/curl.json"]}}
  {
    "error": "invalid_request",
    "message": "status must be active, inviteSent, inviteReceived, declined, or removed."
  }
  ```

  ```json 401 theme={"languages":{"custom":["languages/curl.json"]}}
  {
    "error": "unauthorized",
    "message": "Invalid or missing API key or access token."
  }
  ```
</ResponseExample>
