Anyone Successfully Using SKY API Query Endpoint in Tableau WDC? Getting 404 Errors

Hello everyone,

I’m currently developing a Tableau Web Data Connector (WDC) for Raiser’s Edge NXT. It’s been working well for the Constituents, Gifts, and Actions endpoints, but I’m having trouble with the Query endpoint. Specifically, I’m getting 404 “Resource not found” errors when attempting to fetch records from a saved query (using GET /query/v1/queries/{query_id}/results).

My Setup:

  • I have a Node.js/Express server handling the OAuth flow and storing the access token (server-side).
  • The WDC passes parameters (like queryId, limit, offset) to my server, which constructs the final request:
  • For queries that I’m sure exist (and have data) in RE NXT, I still receive a 404.
  • I’ve verified that other endpoints (e.g., constituent/v1/constituents) work fine with the same token.

Questions:

  1. Has anyone successfully used the SKY API Query endpoint (/query/v1/queries/{queryId}/results) with a custom application or WDC? If so, did you run into 404 issues?
  2. Does the Query endpoint fully support limit/offset for multi-page retrieval, or is there a different paging mechanism (e.g., next_link) to follow?
  3. Could it be a permission or environment issue? The 404 might indicate the user or token doesn’t have access to that query—even though we’re fetching data from the same environment. Any insights on additional scopes or environment approvals needed for NXT queries?
  4. Any best practices for returning large sets from queries in the WDC context?

I’ve already checked for simpler issues like missing spaces in the Bearer token or typos in the base path. Other endpoints function correctly, but queries remain stuck with the 404 error for me. I’d appreciate any advice or success stories from folks who have integrated the Query endpoint into a similar custom solution.

Thanks so much!

Hayden Riebe


Comments

  • Alex Wong
    Alex Wong Community All-Star
    Ninth Anniversary Kudos 5 Facilitator 3 Raiser's Edge NXT Fall 2025 Product Update Briefing Badge

    @Hayden Riebe
    The issue you are having is understanding of how Query API works, not related to WDC or custom app.

    I'm not sure where you got this URL /query/v1/queries/{queryId}/results, I haven't seen this at all in the API documentation, so you may want to dive into the API doc a little more.

    Query APi works completely different from “normal" SKY API. Constituent List API, for example, you will call the API endpoint directly and provide the URL parameters needed and you will receive output from this call the actual data (constituent data). If more than 5000, you can use limit/offset, or sort_token for pagination.

    Query API on the other than, to execute a saved query by id, you will use this endpoint: https://developer.sky.blackbaud.com/api#api=query&operation=StartQueryExecutionJobByID or to execute Ah-hoc query (not pre-saved query, but dynamically create a JSON that represent a query) using this endpoint https://developer.sky.blackbaud.com/api#api=query&operation=StartQueryExecutionJob

    However, both of these endpoint does not provide any data related to what you are querying and expect to get back, instead, the endpoint simply “start” the query run, and you will get back a JOB ID and a status of the query run.

    After that, you will need to use another API endpoint: https://developer.sky.blackbaud.com/api#api=query&operation=GetJob and provide the JOB ID to get the status of the run (Blackbaud recommend to run the get status of job endpoint no more frequent than 30 seconds). The status of the run is returned, only when the status is “Completed”, that the endpoint will also return a sas_uri property, which can be directly accessed to download the CSV or JSON of the data (JSONL is also a format you can choose, but I don't think it is that useful).

    ALL output from the query will be downloaded from accessing sas_uri. There is no pageination.