GrowthZone Scheduled Billing API
Preview, export, set up, and run scheduled recurring membership billing by membership type, and retrieve and download the history of past billing runs. Drives automated dues invoicing across the member base.
Preview, export, set up, and run scheduled recurring membership billing by membership type, and retrieve and download the history of past billing runs. Drives automated dues invoicing across the member base.
openapi: 3.0.3
info:
title: GrowthZone REST API
description: >-
Programmatic access to a GrowthZone association management (AMS) database -
contacts (members and organizations), memberships, groups and directories,
scheduled billing, certifications, and events. GrowthZone is a REST-based,
JSON API served per customer database at
https://{subdomain}.growthzoneapp.com/api, where {subdomain} is the customer
database sub-domain visible in the application URL (some databases are served
from app.memberzone.org). The API is customer/partner-gated: an account must
have API Access enabled, and an API Key is issued by GrowthZone WebSupport
(websupport@growthzone.com). Authenticate by sending an
`Authorization: ApiKey {API_Key}` header (Server authentication); OAuth 2.0 /
OpenID Connect is also supported for user (SSO) flows.
Endpoint status: paths marked "Confirmed" appear in GrowthZone's public
integration documentation and Curated API reference. Paths marked "Modeled"
are honestly inferred to round out standard CRUD or reflect the
ChamberMaster/MemberZone (MicroNet) event feed; verify exact shapes against
the gated full reference at documentation.growthzoneapp.com.
version: '1.0'
contact:
name: GrowthZone WebSupport
url: https://integration.growthzone.com
email: websupport@growthzone.com
license:
name: Proprietary
url: https://www.growthzone.com
servers:
- url: https://{subdomain}.growthzoneapp.com/api
description: GrowthZone customer database (replace {subdomain} with your database sub-domain)
variables:
subdomain:
default: app
description: The customer database sub-domain from your GrowthZone application URL.
- url: https://app.memberzone.org/api
description: MemberZone-hosted GrowthZone databases
security:
- apiKeyAuth: []
tags:
- name: Contacts
description: Individuals (persons) and organizations, and their related data.
- name: Memberships
description: Membership types and member rosters.
- name: Groups & Directory
description: Groups, categories, and directory listings.
- name: Scheduled Billing
description: Recurring membership billing runs by membership type.
- name: Certifications
description: Certification tracks and component completion.
- name: Events
description: Association event calendar and registration (modeled).
paths:
/contacts:
get:
operationId: listContacts
tags: [Contacts]
summary: List contacts (Confirmed)
description: >-
Returns a paged list of contacts. Responses include TotalRecordAvailable
and a Results array of contact records (ContactId, Name,
MembershipStatusTypeId, Balance, ImageUrl, ...).
parameters:
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/PageSize'
responses:
'200':
description: A paged list of contacts.
content:
application/json:
schema:
$ref: '#/components/schemas/ContactListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/contacts/delta:
get:
operationId: listChangedContacts
tags: [Contacts]
summary: List contacts changed since a date (Confirmed)
description: Returns contacts created or modified since the supplied date.
parameters:
- name: since
in: query
required: true
description: ISO 8601 date/time; return contacts changed at or after this instant.
schema:
type: string
format: date-time
responses:
'200':
description: Changed contacts.
content:
application/json:
schema:
$ref: '#/components/schemas/ContactListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/contacts/person/{contactId}:
get:
operationId: getPerson
tags: [Contacts]
summary: Get expanded individual contact (Confirmed)
parameters:
- $ref: '#/components/parameters/ContactId'
responses:
'200':
description: Expanded individual contact.
content:
application/json:
schema:
$ref: '#/components/schemas/Contact'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/contacts/PersonSummary/{contactId}:
get:
operationId: getPersonSummary
tags: [Contacts]
summary: Get basic individual contact summary (Confirmed)
parameters:
- $ref: '#/components/parameters/ContactId'
responses:
'200':
description: Basic individual contact summary.
content:
application/json:
schema:
$ref: '#/components/schemas/Contact'
'401':
$ref: '#/components/responses/Unauthorized'
/contacts/OrgGeneral/{contactId}:
get:
operationId: getOrganizationGeneral
tags: [Contacts]
summary: Get organization contact summary (Confirmed)
parameters:
- $ref: '#/components/parameters/ContactId'
responses:
'200':
description: Organization contact summary.
content:
application/json:
schema:
$ref: '#/components/schemas/Contact'
'401':
$ref: '#/components/responses/Unauthorized'
/contacts/ContactAddresses/{contactId}:
get:
operationId: getContactAddresses
tags: [Contacts]
summary: Get contact addresses (Confirmed)
parameters:
- $ref: '#/components/parameters/ContactId'
responses:
'200':
description: Addresses for the contact.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Address'
'401':
$ref: '#/components/responses/Unauthorized'
/contacts/PrimaryContact/Emails/{primaryContactId}:
get:
operationId: getPrimaryContactEmails
tags: [Contacts]
summary: Get primary contact email addresses (Confirmed)
parameters:
- name: primaryContactId
in: path
required: true
schema:
type: string
responses:
'200':
description: Email addresses for the primary contact.
content:
application/json:
schema:
type: array
items:
type: string
format: email
'401':
$ref: '#/components/responses/Unauthorized'
/contacts/lookup/{contactId}/contactwebsites:
get:
operationId: getContactWebsites
tags: [Contacts]
summary: Get contact websites (Confirmed)
parameters:
- $ref: '#/components/parameters/ContactId'
responses:
'200':
description: Website URLs for the contact.
content:
application/json:
schema:
type: array
items:
type: string
format: uri
'401':
$ref: '#/components/responses/Unauthorized'
/contacts/{contactId}/NotesAndFields:
get:
operationId: getContactNotesAndFields
tags: [Contacts]
summary: Get contact notes and custom fields (Confirmed)
parameters:
- $ref: '#/components/parameters/ContactId'
responses:
'200':
description: Notes and custom field values for the contact.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
/contacts/person/{contactId}/categorySummary:
get:
operationId: getPersonCategorySummary
tags: [Contacts]
summary: Get category summary for an individual (Confirmed)
parameters:
- $ref: '#/components/parameters/ContactId'
responses:
'200':
description: Category summary.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Category'
'401':
$ref: '#/components/responses/Unauthorized'
/contacts/person/{contactId}/memberships:
get:
operationId: getPersonMemberships
tags: [Contacts]
summary: Get memberships for an individual (Confirmed)
parameters:
- $ref: '#/components/parameters/ContactId'
responses:
'200':
description: Memberships held by the individual.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Membership'
'401':
$ref: '#/components/responses/Unauthorized'
/contacts/org/{contactId}/groups:
get:
operationId: getOrganizationGroups
tags: [Contacts]
summary: Get groups for an organization (Confirmed)
parameters:
- $ref: '#/components/parameters/ContactId'
responses:
'200':
description: Groups the organization belongs to.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Group'
'401':
$ref: '#/components/responses/Unauthorized'
/memberships/types:
get:
operationId: listMembershipTypes
tags: [Memberships]
summary: List membership types (Confirmed)
description: Returns all membership types, paged.
parameters:
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/PageSize'
responses:
'200':
description: A paged list of membership types.
content:
application/json:
schema:
type: object
properties:
TotalRecordAvailable:
type: integer
Results:
type: array
items:
$ref: '#/components/schemas/MembershipType'
'401':
$ref: '#/components/responses/Unauthorized'
/memberships/all:
post:
operationId: listAllMemberships
tags: [Memberships]
summary: List all memberships, filtered by type/status (Confirmed)
description: >-
Returns memberships across the database, optionally filtered by
membership type and status. Accepts a JSON body of filter criteria and
returns TotalRecordAvailable plus a paged Results array.
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/MembershipQuery'
responses:
'200':
description: A paged list of memberships.
content:
application/json:
schema:
type: object
properties:
TotalRecordAvailable:
type: integer
Results:
type: array
items:
$ref: '#/components/schemas/Membership'
'401':
$ref: '#/components/responses/Unauthorized'
/GroupsApi_GetGroupsByCategories:
post:
operationId: getGroupsByCategories
tags: [Groups & Directory]
summary: Get groups by categories (Confirmed)
description: Resolves groups for one or more categories to build a filtered directory.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
CategoryIds:
type: array
items:
type: integer
responses:
'200':
description: Groups matching the supplied categories.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Group'
'401':
$ref: '#/components/responses/Unauthorized'
/groups/{groupId}/members:
get:
operationId: listGroupMembers
tags: [Groups & Directory]
summary: List members of a group (Modeled)
description: >-
Modeled. Lists the member contacts belonging to a group, for directory
rendering. Exact path and shape are behind the gated reference.
parameters:
- name: groupId
in: path
required: true
schema:
type: string
responses:
'200':
description: Group members.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Contact'
'401':
$ref: '#/components/responses/Unauthorized'
/certifications/{certificationContactId}/Components/{certificationComponentId}/Completed:
post:
operationId: markCertificationComponentCompleted
tags: [Certifications]
summary: Mark a certification component completed (Confirmed)
parameters:
- name: certificationContactId
in: path
required: true
schema:
type: string
- name: certificationComponentId
in: path
required: true
schema:
type: string
responses:
'200':
description: The component was marked complete.
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/scheduledbilling/membershiptype/items:
post:
operationId: previewScheduledBillingItems
tags: [Scheduled Billing]
summary: Preview scheduled billing items by membership type (Confirmed)
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ScheduledBillingRequest'
responses:
'200':
description: Preview of items that would be billed.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
/scheduledbilling/membershiptype/items/export:
post:
operationId: exportScheduledBillingItems
tags: [Scheduled Billing]
summary: Export scheduled billing items (Confirmed)
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ScheduledBillingRequest'
responses:
'200':
description: Exported billing items.
'401':
$ref: '#/components/responses/Unauthorized'
/scheduledbilling/membershiptype/items/run/setup:
post:
operationId: setupScheduledBillingRun
tags: [Scheduled Billing]
summary: Set up a scheduled billing run (Confirmed)
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ScheduledBillingRequest'
responses:
'200':
description: Billing run configured.
'401':
$ref: '#/components/responses/Unauthorized'
/scheduledbilling/membershiptype/items/run:
post:
operationId: runScheduledBilling
tags: [Scheduled Billing]
summary: Run scheduled billing for a membership type (Confirmed)
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ScheduledBillingRequest'
responses:
'200':
description: Billing run started; returns a system job identifier.
content:
application/json:
schema:
type: object
properties:
SystemJobId:
type: string
'401':
$ref: '#/components/responses/Unauthorized'
/scheduledbilling/membershiptype/run/history:
get:
operationId: listScheduledBillingRunHistory
tags: [Scheduled Billing]
summary: List scheduled billing run history (Confirmed)
responses:
'200':
description: History of past scheduled billing runs.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/BillingRun'
'401':
$ref: '#/components/responses/Unauthorized'
/scheduledbilling/membershiptype/run/history/download/{systemjobid}:
post:
operationId: downloadScheduledBillingRun
tags: [Scheduled Billing]
summary: Download a scheduled billing run result (Confirmed)
parameters:
- name: systemjobid
in: path
required: true
schema:
type: string
responses:
'200':
description: The billing run result file.
content:
application/octet-stream:
schema:
type: string
format: binary
'401':
$ref: '#/components/responses/Unauthorized'
/events:
get:
operationId: listEvents
tags: [Events]
summary: List events by date range and status (Modeled)
description: >-
Modeled from the GrowthZone ChamberMaster/MemberZone event feed (legacy
base api.micronetonline.com/v1/associations({id})/events/details).
Returns events filtered by date range and status for calendar embeds.
parameters:
- name: startDate
in: query
schema:
type: string
format: date
- name: endDate
in: query
schema:
type: string
format: date
- name: status
in: query
schema:
type: string
responses:
'200':
description: A list of events.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Event'
'401':
$ref: '#/components/responses/Unauthorized'
/events/{eventId}:
get:
operationId: getEvent
tags: [Events]
summary: Get event details (Modeled)
parameters:
- name: eventId
in: path
required: true
schema:
type: string
responses:
'200':
description: Event details.
content:
application/json:
schema:
$ref: '#/components/schemas/Event'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
components:
securitySchemes:
apiKeyAuth:
type: apiKey
in: header
name: Authorization
description: >-
Server authentication. Send `Authorization: ApiKey {API_Key}` where the
API Key is issued per application by GrowthZone WebSupport. OAuth 2.0 /
OpenID Connect (authorize/token/userinfo at growthzoneapp.com) is used
for user SSO flows.
parameters:
ContactId:
name: contactId
in: path
required: true
description: The GrowthZone ContactId (individual or organization).
schema:
type: string
Page:
name: page
in: query
required: false
schema:
type: integer
minimum: 1
default: 1
PageSize:
name: pageSize
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 500
default: 100
responses:
Unauthorized:
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: The requested resource was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
ContactListResponse:
type: object
properties:
TotalRecordAvailable:
type: integer
Results:
type: array
items:
$ref: '#/components/schemas/Contact'
Contact:
type: object
properties:
ContactId:
type: string
Name:
type: string
ContactType:
type: string
enum: [Individual, Organization]
MembershipStatusTypeId:
type: integer
description: >-
Status code - 1 Prospective, 2 Active, 4 Courtesy, 8 NonMember,
16 Inactive, 32 Deleted.
Balance:
type: number
ImageUrl:
type: string
format: uri
Address:
type: object
properties:
Type:
type: string
Line1:
type: string
Line2:
type: string
City:
type: string
StateProvince:
type: string
PostalCode:
type: string
Country:
type: string
Category:
type: object
properties:
CategoryId:
type: integer
Name:
type: string
Group:
type: object
properties:
GroupId:
type: string
Name:
type: string
CategoryId:
type: integer
Membership:
type: object
properties:
MembershipId:
type: string
ContactId:
type: string
MembershipTypeId:
type: integer
Status:
type: string
JoinDate:
type: string
format: date
MembershipType:
type: object
properties:
MembershipTypeId:
type: integer
Name:
type: string
IsActive:
type: boolean
MembershipQuery:
type: object
properties:
MembershipTypeId:
type: integer
MembershipStatusTypeId:
type: integer
Page:
type: integer
PageSize:
type: integer
ScheduledBillingRequest:
type: object
properties:
MembershipTypeId:
type: integer
BillingDate:
type: string
format: date
BillingRun:
type: object
properties:
SystemJobId:
type: string
RunDate:
type: string
format: date-time
Status:
type: string
RecordCount:
type: integer
Event:
type: object
properties:
EventId:
type: string
Name:
type: string
StartDateTime:
type: string
format: date-time
EndDateTime:
type: string
format: date-time
Location:
type: string
Status:
type: string
RegistrationUrl:
type: string
format: uri
Error:
type: object
properties:
Message:
type: string
Code:
type: string