Prerequisites
- Access to a Virtuous CRM+ organization with administrator permissions (you cannot create API keys without them).
- A terminal with
curlavailable, or a Node.js environment if you prefer to follow along in JavaScript. - A secrets manager or environment-variable mechanism for storing the API key — never commit it to source control.
1. Create an API Key
Sign in to Virtuous
Open your organization’s Virtuous instance and sign in with an account that has administrator permissions.
Create a new key
Click Create a Key, give it a descriptive name (typically the name of the integration you are building), choose the appropriate permission group, and save.
2. Verify the key works
Send a request toGET /api/Organization/Current — it requires only auth and returns the current organization profile. A successful response confirms your token is valid and your network path to the API is working.
If you received a
200 OK and the organization name matches the Virtuous account you generated the key in, your credentials are working. Move on to the next step.401, the Authorization header is missing, malformed, or the key has been revoked. Re-check the header format (Bearer YOUR_API_TOKEN, with the literal word Bearer followed by a single space) and confirm the key in the Virtuous UI is still active. See Error Handling for full status code coverage.
3. Run your first Contact query
The Contact query endpoint is the workhorse read for most partner integrations — it powers incremental sync, donor lookups, and any workflow that retrieves Contact records by filter. The minimal call below returns the first ten Contacts sorted by last name.list holds the records returned on this page. total is the total count across all pages. To advance through the full result set, increment skip by take on each subsequent request — see Pagination and Filtering for the full loop pattern.
POST /api/Contact/Query accepts a structured filter object, not a free-text search string. The empty groups: [] value above returns all Contacts. To filter by specific fields (modification date, tags, custom field values), populate groups with filter clauses. The available fields and operators are returned by GET /api/Contact/QueryOptions.4. Where to go from here
You now have a working API key, verified authentication, and a pagination-aware read against the Contact resource. The next pages cover the patterns every partner integration needs:Make Your First API Call
A longer walkthrough that covers headers, response inspection, and common first-call failures.
Authentication
Full coverage of API Keys and OAuth, including refresh, rotation, and two-factor flows.
Pagination and Filtering
Iterate large result sets safely and use
Contact/Query filters effectively.Error Handling
The error response shape, status codes, and defensive patterns for production integrations.
Create a Contact
The first write workflow — and why most partners should use the transaction endpoint.
Sync External Donations
The canonical recipe for pushing Gifts from your platform into Virtuous.