> For the complete documentation index, see [llms.txt](https://docs.scaleconnect.com.au/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.scaleconnect.com.au/api/rest-api/scaleconnect-rest-api.md).

# ScaleConnect REST API

{% @scale-docs-page-title/page-title title="ScaleConnect REST API" %}

{% hint style="warning" %}
**Confirm before publishing:** implement and test the integrator guard and resource isolation, freeze the operation selection and `/v1/integrators` paths, resolve the import-status scope conflict, publish response DTOs and errors, and generate an OpenAPI spec from the selected routes. This is the intended partner contract, not a claim that these routes are currently live.
{% endhint %}

The ScaleConnect API gives an approved integration access to one permitted brokerage book. It separates **sync inputs**, **computed outputs**, **broker workflows** and **integration administration**. All routes below are relative to the approved API host and require an API key or delegated token with the listed scope.

## Start with identity

```http
GET /v1/integrators/me HTTP/1.1
Authorization: Bearer sc_live_<secret>
Accept: application/json
```

The response identifies the integrator and its granted scopes. Check it before syncing data. Every client read must also pass a current brokerage/client-book access check.

## Sync and client inputs

| Method   | Path                                     | Scope          | Result                                                                               |
| -------- | ---------------------------------------- | -------------- | ------------------------------------------------------------------------------------ |
| `POST`   | `/v1/integrators/sync/client`            | `sync:write`   | Accepts a batch keyed by external client ID; returns an import ID and accepted count |
| `POST`   | `/v1/integrators/sync/property`          | `sync:write`   | Upserts a property by external ID                                                    |
| `GET`    | `/v1/integrators/clients`                | `clients:read` | Lists reachable clients; `updatedSince` supports incremental reads                   |
| `GET`    | `/v1/integrators/clients/{id}`           | `clients:read` | Returns the stored input shape needed for a round trip                               |
| `GET`    | `/v1/integrators/imports/{id}`           | Confirm        | Returns batch status and counts                                                      |
| `GET`    | `/v1/integrators/imports/{id}/anomalies` | `clients:read` | Returns validation and anomaly findings                                              |
| `DELETE` | `/v1/integrators/clients/{id}`           | `sync:write`   | Archives the link; does not hard-delete client history                               |

The client sync design accepts up to 50 items per standard request, returns `202 Accepted`, and reconciles asynchronously. An external ID is unique **within its integrator**. Retry by that ID rather than creating a second client. The final request DTO and partial-failure result belong in the generated operation reference.

## Computed data and broker workflows

| Method                           | Path                                                | Scope                           | Result                                                                 |
| -------------------------------- | --------------------------------------------------- | ------------------------------- | ---------------------------------------------------------------------- |
| `GET`                            | `/v1/integrators/clients/{id}/portfolio`            | `portfolio:read`                | Modelled portfolio; `include=projection,charts` selects heavier output |
| `GET`                            | `/v1/integrators/clients/{id}/timeline`             | `portfolio:read`                | Timeline; `granularity` and `scope` select the view                    |
| `GET`                            | `/v1/integrators/clients/{id}/loans`                | `loans:read`                    | Loan facts and balances                                                |
| `GET`, `POST`                    | `/v1/integrators/clients/{id}/actuals`              | `actuals:read`, `actuals:write` | Read or record actuals                                                 |
| `GET`                            | `/v1/integrators/book`                              | `broker:read`                   | Brokerage book summary                                                 |
| `GET`                            | `/v1/integrators/book/clients`                      | `broker:read`                   | Book client view and filters                                           |
| `GET`                            | `/v1/integrators/clients/{id}/commissions`          | `commissions:read`              | Read-only commission details                                           |
| `GET`, `POST`, `PATCH`, `DELETE` | `/v1/integrators/clients/{id}/notes[/{noteId}]`     | `notes:read`, `notes:write`     | Integration-owned notes                                                |
| `GET`, `POST`                    | `/v1/integrators/clients/{id}/reviews[/{reviewId}]` | `reviews:read`, `reviews:write` | Read reviews or request generation                                     |

The generated public OpenAPI reference must split combined rows into individual operations with exact schemas. A `POST` that starts long-running work should return a request or import ID; follow its status endpoint or [webhook](/api/webhooks.md) rather than assuming synchronous completion.

## Integration administration

| Method                  | Path                                                          | Scope                             |
| ----------------------- | ------------------------------------------------------------- | --------------------------------- |
| `GET`                   | `/v1/integrators/me`                                          | Valid key                         |
| `POST`, `GET`, `DELETE` | `/v1/integrators/webhooks[/{id}]`                             | `webhooks:write`, `webhooks:read` |
| `GET`                   | `/v1/integrators/webhooks/{id}/deliveries`                    | `webhooks:read`                   |
| `POST`                  | `/v1/integrators/webhooks/{id}/deliveries/{deliveryId}/retry` | `webhooks:write`                  |
| `POST`                  | `/v1/integrators/webhooks/{id}/rotate-secret`                 | `webhooks:write`                  |

See [Webhooks](/api/webhooks.md) for delivery and [Authentication](/api/authentication.md) for credentials. Administrator key-issuance routes are internal and separate from the partner surface.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.scaleconnect.com.au/api/rest-api/scaleconnect-rest-api.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
