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

# Reference

> Configuration properties, operations, and events for the SaltEdge Connector

export const VendorApiVersionTag = ({versions, label = "Supports"}) => {
  useEffect(() => {
    if (!versions || versions.length === 0) {
      return undefined;
    }
    const findAndSegmentStart = (reference, target) => {
      let i = 0;
      while (i < reference.length && i < target.length && reference[i] === target[i]) {
        i += 1;
      }
      let start = i;
      while (start > 0 && (/[0-9.vR]/).test(target[start - 1])) {
        start -= 1;
      }
      return start;
    };
    const formatText = () => {
      const suffix = " operations";
      if (versions.length === 1) {
        return `${label} ${versions[0]}${suffix}`;
      }
      const [first, ...rest] = versions;
      const last = rest[rest.length - 1];
      const andStart = findAndSegmentStart(first, last);
      const lead = first.slice(0, andStart);
      if (versions.length === 2) {
        return `${label} ${first} and ${last.slice(andStart)}${suffix}`;
      }
      const stems = versions.map(version => version.slice(andStart));
      return `${label} ${lead}${stems.slice(0, -1).join(", ")}, and ${stems[stems.length - 1]}${suffix}`;
    };
    const text = formatText();
    const mountCallout = () => {
      const title = document.querySelector("#page-title");
      const header = title?.closest("header") ?? document.querySelector("#header");
      if (!title || !header || !header.contains(title)) {
        return null;
      }
      let titleBlock = title;
      while (titleBlock.parentElement && titleBlock.parentElement !== header) {
        titleBlock = titleBlock.parentElement;
      }
      let callout = header.querySelector("[data-vendor-api-version-callout='true']");
      if (!callout) {
        callout = document.createElement("div");
        callout.dataset.vendorApiVersionCallout = "true";
        callout.className = "vendor-api-version-callout";
        titleBlock.insertAdjacentElement("afterend", callout);
      }
      callout.replaceChildren();
      const textEl = document.createElement("span");
      textEl.className = "vendor-api-version-text";
      textEl.textContent = text;
      callout.appendChild(textEl);
      return callout;
    };
    let callout = mountCallout();
    if (callout) {
      return () => {
        callout?.remove();
      };
    }
    const observer = new MutationObserver(() => {
      callout = mountCallout();
      if (callout) {
        observer.disconnect();
      }
    });
    observer.observe(document.body, {
      childList: true,
      subtree: true
    });
    return () => {
      observer.disconnect();
      callout?.remove();
    };
  }, [versions, label]);
  return null;
};

export const vendorApiVersions = ["SaltEdge Data Enrichment API v6"];

<VendorApiVersionTag versions={vendorApiVersions} />

SaltEdge transaction enrichment uses two connectors. The outbound connector, `gc-saltedge-position-keeping-connector`, orchestrates SaltEdge Data Enrichment processing. The inbound connector, `gc-saltedge-position-keeping-inbound-connector`, receives the SaltEdge callback and publishes the results to Sync Hub. For setup steps, see [Get started](/connectors/financial-data-aggregation/saltedge-transaction-enrichment/get-started).

## Configuration properties

### Values to obtain from the vendor

Obtain the following values from SaltEdge and set them in the connector values files for your runtime. The following table lists each property and its purpose.

| Property                                      | Description                                                                           |
| :-------------------------------------------- | :------------------------------------------------------------------------------------ |
| `saltedge.baseUrl`                            | SaltEdge Data Enrichment API base URL for your environment.                           |
| `saltedge.customer-id`                        | SaltEdge customer ID.                                                                 |
| `saltedge.callback.signature.public-key.v6_0` | Public key that the inbound connector uses to verify the SaltEdge callback signature. |

### gc-saltedge-position-keeping-inbound-connector

The following table lists the deployment properties of the inbound connector, `gc-saltedge-position-keeping-inbound-connector`, and the values that Grand Central ships as defaults.

| Property                              | Description                                                              | Default                                                                                                            |
| :------------------------------------ | :----------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------- |
| `saltedge.callback.signature.enabled` | Turns on signature verification for categorization callbacks.            | `true`                                                                                                             |
| `saltedge.callback.url`               | Callback URL that the connector registers for the payload.               | No default. Set this value at deployment.                                                                          |
| `asb.producer.apiUri`                 | Callback URI of the Sync Hub ASB producer that receives outgoing events. | No default. Set this value at deployment, for example `http://asb-producer-v0.synchub-producer.svc.cluster.local`. |
| `asb.event.topic`                     | ASB topic for enrichment result events.                                  | `transactions-enriched`                                                                                            |
| `asb.event.source`                    | The ASB source for outgoing messages.                                    | `gc-saltedge-position-keeping-inbound-connector`                                                                   |
| `asb.event.type`                      | The ASB event type for outgoing messages.                                | `transactionsEnriched`                                                                                             |
| `asb.event.version`                   | Schema version of the published event.                                   | `1.1.0`                                                                                                            |

### gc-saltedge-position-keeping-connector

The following table lists the deployment properties of the outbound connector, `gc-saltedge-position-keeping-connector`.

| Property                       | Description                                | Default    |
| :----------------------------- | :----------------------------------------- | :--------- |
| `saltedge.categorization-type` | Selects the SaltEdge categorization model. | `personal` |

## SOPS secrets

Both connectors send the SaltEdge `App-Id` and `App-Secret` as request headers. The following table lists the credentials to store in a SOPS secret. For more information, see [How to create SOPS](/platform/developer-guides/build/configure-connector).

| Credential                         | Description                           |
| :--------------------------------- | :------------------------------------ |
| `saltedge-position-keeping-app-id` | SaltEdge `App-Id` request header.     |
| `saltedge-position-keeping-secret` | SaltEdge `App-Secret` request header. |

## Supported operations

For the full contract, see the [API playground](/connectors/reference/unified-api-playground).

| Method                                         | Endpoint                            | Purpose                                                                                       |
| :--------------------------------------------- | :---------------------------------- | :-------------------------------------------------------------------------------------------- |
| <span className="http-method-post">POST</span> | `/internal/transactions/enrichment` | Accept a batch of transactions for asynchronous enrichment. Returns `202` with an empty body. |

### Inbound webhook

| Method                                         | Endpoint                                | Purpose                                                                                              |
| :--------------------------------------------- | :-------------------------------------- | :--------------------------------------------------------------------------------------------------- |
| <span className="http-method-post">POST</span> | `/webhooks/transaction-categorizations` | Receive SaltEdge categorization completion callbacks. The connector verifies the SaltEdge signature. |

An enrichment request must include a unique `enrichmentRequestId`, a `partyInformation` array, and an `accounts` array. A request can contain a maximum of 50 accounts, and each account can contain a maximum of 100 transactions.

## Events

### gc-saltedge-position-keeping-inbound-connector

The inbound connector publishes the following Sync Hub events when SaltEdge categorization completes.

| Event                  | When emitted                                                                         |
| :--------------------- | :----------------------------------------------------------------------------------- |
| `transactionsEnriched` | SaltEdge categorization completes successfully, including partial per-item outcomes. |

Published events use the standard Grand Central envelope. The `data` payload includes per-transaction category, merchant, location, and counterparties.

The inbound connector publishes an event only when the SaltEdge callback reports a completed categorization. For any other callback status, the inbound connector acknowledges the callback and publishes no event.

### gc-saltedge-position-keeping-connector

The outbound connector does not publish or consume Sync Hub events. It accepts the enrichment API request and calls the SaltEdge categorization APIs.

## Error mapping

The connector maps SaltEdge error responses to Grand Central status codes. For the full list of Grand Central codes, see [Error codes](/connectors/reference/error-codes). The following table shows the SaltEdge codes and the corresponding Grand Central codes:

| SaltEdge code                   | Grand Central code |
| :------------------------------ | :----------------- |
| `ActionNotAllowed`              | `GC004`            |
| `DuplicatedRecord`              | `GC616`            |
| `InvalidParams`                 | `GC025`            |
| `InvalidRequestFormatError`     | `GC024`            |
| `MissingParams`                 | `GC439`            |
| `MissingRequiredFields`         | `GC439`            |
| `WrongRequestFormat`            | `GC024`            |
| `StandaloneCategorizationError` | `GC415`            |
| `TooManyImportObjectsError`     | `GC066`            |
| `EnrichmentError`               | `GC028`            |
| `RecordNotFound`                | `GC054`            |
| `CustomerNotFound`              | `GC054`            |

## Dependencies

* [Sync Hub](/platform/sync-hub/overview)
* [Grand Central unified transaction enrichment API](/connectors/reference/unified-api-playground)
* [SaltEdge Data Enrichment](https://www.saltedge.com/products/data_enrichment)
