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