# Blackbaud — CRM API: configuration

> Canonical URL: https://developers.apideck.com/apis/crm/blackbaud/configuration

# How to connect to the Blackbaud Raiser's Edge NXT API

Apideck enables you to build a native integration with Blackbaud Raiser's Edge NXT. This guide explains how to configure the "Blackbaud Raiser's Edge NXT" connector to access constituent and gift records through the unified CRM API.

The connector uses the Blackbaud SKY API. It needs three credentials from you: an **Application ID** and an **application secret** from a SKY application you register, plus a **SKY API subscription key** from your SKY Developer account. You register one application for all your customers; each customer then connects it to their own Raiser's Edge NXT environment.

## Prerequisites

Before you begin, make sure you have the following:

1. A **SKY Developer account**. Anyone with a Blackbaud ID can sign up, and the account must be able to receive emails from Blackbaud. See [Create a SKY Developer account](https://developer.blackbaud.com/skyapi/docs/getting-started/developer-account).
2. An Apideck account.

You do not need to be an administrator of a Blackbaud environment yourself. That role sits with each of your customers, whose organisation admin connects your application before anyone can authorise it (see [Give your Application ID to each customer](#give-your-application-id-to-each-customer)).

## Enable the Blackbaud Raiser's Edge NXT connector in Apideck

In Apideck, go to **Configuration > CRM API** and enable [**Blackbaud Raiser's Edge NXT**](https://platform.apideck.com/configuration/crm/blackbaud) in the list of connectors.

## Setting up OAuth credentials in Blackbaud

### 1. Create your SKY Developer account

1. Follow [Create a SKY Developer account](https://developer.blackbaud.com/skyapi/docs/getting-started/developer-account) and sign in with your Blackbaud ID.
2. If you don't have a Blackbaud ID, create one using your organisation's email address.

![Blackbaud Developer Portal Login](https://res.cloudinary.com/apideck/image/upload/v1756730971/docs/connectors/blackbaud/step-2-developer-portal.png)

### 2. Create a new application

1. In SKY Developer, open **My applications**
   ![Blackbaud Developer Portal My Applications](https://res.cloudinary.com/apideck/image/upload/v1756731158/docs/connectors/blackbaud/step-3-new-application.png)
2. Click the **"+ New application"** button
3. Fill in your application details:
   - **Application Name**: Enter a meaningful name (e.g., "Your Company CRM Integration") as it will be displayed to users when they authorise your application.
   - **Application Details**: Provide a brief description of your integration
   - **Which team owns this application?**: Select your organisation's SKY Developer team. Applications assigned to a team receive that team's benefits, such as quota upgrades.
   - **Publisher**: This should be your company name.
   - **Application logo**: Upload the logo of your application.
   - **Application website URL**: Enter the website URL of your application.
   - Click on **"Save"** button.

![Create Blackbaud Application](https://res.cloudinary.com/apideck/image/upload/v1756731230/docs/connectors/blackbaud/step-3-create-app.png)

One application serves all your customers: Blackbaud states that you do not need to register a unique application for each organisation. See Blackbaud's [Applications](https://developer.blackbaud.com/skyapi/docs/applications) documentation.

### 3. Set up Redirect URI

1. On your application's details page, open the **Redirect URIs** tile
2. Add the Apideck redirect URI: `https://unify.apideck.com/vault/callback`
3. Click on **"Save"** button.

The redirect URI must match exactly, including any trailing slash. See Blackbaud's [Authorization](https://developer.blackbaud.com/skyapi/docs/authorization) documentation.

![Set up Redirect URI](https://res.cloudinary.com/apideck/image/upload/v1756731335/docs/connectors/blackbaud/step-3-redirect-uri.png)

### 4. Scopes

If your application's settings show a **Scopes** tab, grant read access to constituent and gift data there and save. The connector only reads data, so write access is not needed.

![Request API Access](https://res.cloudinary.com/apideck/image/upload/v1756731383/docs/connectors/blackbaud/step-4-api-access.png)

### 5. Obtain your OAuth credentials

1. Go to your application's **"Credentials"** tab
2. Copy the **Application ID** (Client ID)
3. Copy the **Primary application secret** (Client Secret)

![Blackbaud OAuth Credentials](https://res.cloudinary.com/apideck/image/upload/v1756731499/docs/connectors/blackbaud/step-5-credentials.png)

**Tip**: Keep these credentials secure and never share them publicly. The application secret should be treated as a password. The Application ID is not secret: you will share it with each customer in a later step.

### 6. Subscribe to Standard APIs and copy your subscription key

Every SKY API call also carries a subscription key. The key belongs to your SKY Developer account, not to the application, and one key serves every customer environment your application connects to.

1. In SKY Developer, open **My subscriptions**
2. Under **Standard APIs**, click **Subscribe**, scroll through the terms and click **Submit**. You only need Standard APIs; the Payments API is for Blackbaud Merchant Services and is not used by this connector.
3. Copy the **Primary access key**. This is your **Subscription Key**.

You also get a secondary key. Blackbaud recommends rotating keys at least every 90 days; if you rotate, update the key in Apideck at the same time. See [Subscriptions and keys](https://developer.blackbaud.com/skyapi/docs/getting-started/access-and-limits/subscriptions-and-keys).

### 7. Optional: claim a quota upgrade

Your subscription starts on the Free tier. If you are a member of a Blackbaud customer or partner team, you can move to the higher Standard tier by clicking **Claim upgrade** on **My subscriptions**. Quota upgrades apply only to production applications assigned to that team. See [Subscription tiers and pricing](https://developer.blackbaud.com/skyapi/docs/getting-started/access-and-limits/subscription-tiers-and-pricing).

## Configure the connector in Apideck

Now that you have your Blackbaud credentials, configure the integration in Apideck:

1. Go to **Apideck > Configuration > CRM > [Blackbaud Raiser's Edge NXT](https://platform.apideck.com/configuration/crm/blackbaud)**

2. Enter your credentials:

   - **Client ID**: Enter your Application ID from Blackbaud
   - **Client Secret**: Enter your primary application secret from Blackbaud
   - **Subscription Key**: Enter the primary access key from your Standard APIs subscription. This field is required; Apideck sends it with every call.

3. Click **"Save settings"** to save your credentials

Your Blackbaud Raiser's Edge NXT connector is now configured and ready for use.

## Give your Application ID to each customer

Before any user in a customer's organisation can authorise your application in Vault, an organisation admin (or a user with Marketplace permissions) must connect the application to their Blackbaud environment:

1. Send the customer's admin your **Application ID**. Never send the application secret or the subscription key.
2. The admin opens **Blackbaud Marketplace**, goes to **Manage**, selects **Connect app**, pastes the Application ID and clicks **Connect**.
3. Once connected, users in that organisation can authorise the connection in Vault. The admin can deactivate the application at any time from **Manage**.

If your application has a listing in the Blackbaud Marketplace, the admin can select **Connect** on the listing instead. See Blackbaud's [Create an application](https://developer.blackbaud.com/skyapi/docs/applications/createapp) documentation. Your customers can follow the consumer connection guide for these steps.

## Connecting your Blackbaud account

### 1. Test the connection through Vault

To test against your own Raiser's Edge NXT environment, connect your application in your own Blackbaud Marketplace first, as described above. If you don't have an environment of your own, you can request access to a [SKY Developer Cohort](https://developer.blackbaud.com/skyapi/docs/getting-started/cohort) test sandbox; applications there are connected virtually, so no Marketplace step applies.

1. Navigate to [Apideck Vault](https://platform.apideck.com/vault)
2. Create a test session or use an existing consumer
3. Find **Blackbaud Raiser's Edge NXT** in the available connections
4. Click **"Connect"** to initiate the OAuth flow

### 2. Authorise the connection

1. You'll be redirected to Blackbaud's authorisation page
2. Sign in with your Blackbaud ID if prompted
3. Review the permissions requested by your application
4. Click **"Authorize"** to grant access

![Blackbaud Authorization](https://res.cloudinary.com/apideck/image/upload/v1756731585/docs/connectors/blackbaud/step-8-authorize.png)

### 3. Verify the connection

After successful authorisation, you'll be redirected back to Vault with a confirmed connection status.

## What the connector reads

The connector is read-only: it lists and retrieves contacts (Blackbaud constituents, including organisations) and opportunities (gift records). The Supported Resources tab lists every field and operation.

## Do your first API call to the CRM API

Test your integration by making a call to retrieve contacts:

```bash
curl --location --request GET 'https://unify.apideck.com/crm/contacts' \
--header 'x-apideck-consumer-id: test-consumer' \
--header 'x-apideck-app-id: {APIDECK_APP_ID}' \
--header 'x-apideck-service-id: blackbaud' \
--header 'Authorization: Bearer {APIDECK_API_KEY}' \
--header 'Content-Type: application/json'
```

### Example response:

```json
{
  "status_code": 200,
  "status": "OK",
  "data": [
    {
      "id": "280",
      "name": "John Smith",
      "first_name": "John",
      "last_name": "Smith",
      "emails": [
        {
          "email": "john.smith@example.com",
          "type": "primary"
        }
      ],
      "phone_numbers": [
        {
          "number": "+1-555-123-4567",
          "type": "primary"
        }
      ],
      "addresses": [
        {
          "line1": "123 Main Street",
          "city": "New York",
          "state": "NY",
          "postal_code": "10001",
          "country": "US",
          "type": "primary"
        }
      ],
      "updated_at": "2024-01-15T14:22:00Z",
      "created_at": "2023-01-15T10:30:00Z"
    }
  ]
}
```

## Troubleshooting

### Common issues and solutions

**Issue: Authentication fails because of the client credentials**

- **Solution**: Verify that you've copied the correct Application ID and primary application secret from your Blackbaud application's **Credentials** tab.

**Issue: The authorisation fails with a redirect URI error**

- **Solution**: Check that `https://unify.apideck.com/vault/callback` is listed in your application's **Redirect URIs** tile exactly as written, with no trailing slash.

**Issue: The user cannot authorise, or calls return 401 or 403 for one customer**

- **Solution**: The most common cause is that the customer's organisation admin has not yet connected your application in Blackbaud Marketplace, or has deactivated it. Ask the admin to connect it with your Application ID (see [Give your Application ID to each customer](#give-your-application-id-to-each-customer)), then authorise again in Vault.

**Issue: Calls fail for every customer**

- **Solution**: Check the credentials in the Apideck configuration, starting with the **Subscription Key**. It must be the primary (or secondary) access key of an active Standard APIs subscription on your SKY Developer account; if you rotated or regenerated the key in SKY Developer, update it in Apideck.

**Issue: Calls return "403 Quota Exceeded" or "429 Too Many Requests"**

- **Solution**: A 429 means the per-second rate limit was hit; retry with exponential backoff. A 403 Quota Exceeded means your subscription's daily quota is used up; it resets at 0:00 UTC. Outside the Partner tier, the daily quota is shared by every environment your application is connected to, so plan polling frequency across all customers. See [Rate limits and quotas](https://developer.blackbaud.com/skyapi/docs/getting-started/access-and-limits/rate-limits-and-quotas).

**Issue: No data returned from API calls**

- **Solution**: Verify that the Blackbaud environment contains the expected data. Access is limited to the security permissions of the user who authorised the connection, so that user needs access to constituent and gift records in Raiser's Edge NXT.

### Data synchronisation considerations

- **Caching**: Consider caching frequently accessed data to reduce API calls and stay within your daily quota.
- **Pagination**: Large datasets are returned in pages; use the cursor in the response to fetch the next page.

## Start building with the Blackbaud Raiser's Edge NXT API

Now that your Blackbaud Raiser's Edge NXT connector is configured:

1. **Explore the unified CRM API**: Learn about all available endpoints in the [Apideck CRM API documentation](https://developers.apideck.com/apis/crm/reference)

2. **Build your integration**: Use the unified API to build features like:

   - Constituent data synchronisation
   - Donation tracking and reporting
   - Campaign performance analytics
   - Donor segmentation and targeting

3. **Test thoroughly**: Use Apideck's testing tools to validate your integration before going live

4. **Monitor usage**: Keep track of your API usage and performance through the Apideck Dashboard

Interested in a personalised demo? [Let us know](https://www.apideck.com/demo-request?from=guide).


[API reference](https://developers.apideck.com/apis/crm/reference.md) · [Coverage matrix](https://developers.apideck.com/apis/crm/coverage)
