API Documentation
Welcome to the Disciply API documentation. This guide will help you integrate with our RESTful API to manage discipleship programs, groups, challenges, and more.
Getting Started
The Disciply API provides programmatic access to your discipleship management platform. To get started with the API, you'll need to:
- Register for an account at https://disciply.app/register
- Log in to your Disciply account
- Subscribe to a Pro plan - API access requires an active Pro subscription
- Generate your API token - Follow the authentication steps below
Base URL
Authentication
The Disciply API uses Laravel Sanctum for authentication. You'll need to include a Bearer token in the Authorization header of your API requests.
Generating Your API Token
To generate a Bearer token for API access:
- Log in to your account by making a POST request to the login endpoint:
Request Body
Response
Using Your API Token
Include the token in the Authorization header of all API requests:
Example Request with cURL
Groups API
Manage discipleship groups, memberships, and group activities.
group_type field. All groups now have a type of either 'group' (regular groups) or 'global' (organization-wide groups). Please update your mobile apps to handle these types appropriately.
Group Types
Groups in Disciply are now categorized into two types:
- Regular Groups (
group_type: 'group'): Traditional small groups with specific members, leaders, and full functionality - Global Groups (
group_type: 'global'): Organization-wide groups where all members of an organization are automatically enrolled
Global Group Characteristics
| Feature | Regular Groups | Global Groups |
|---|---|---|
| Membership | Invite/join based | Auto-enrolled (all org members) |
| Who can post | All members | Organization admins only |
| Comments allowed | Yes | No |
| Member list visible | Yes | Count only (privacy) |
| Can edit/delete | Yes (with permissions) | No (system-managed) |
| Displayed in app | Mixed with other groups | Sorted to top of list |
Retrieve a list of all groups the authenticated user is a member of. Global groups are automatically included and sorted to the top.
Response Example
Important Fields
| Field | Type | Description |
|---|---|---|
group_type |
string | NEW: Either 'group' or 'global'. Use this to determine group behavior. |
type |
string|null | Group category (e.g., "Discipleship", "Bible Study"). Only used for regular groups. |
status |
string | Group status: 'active', 'draft', or 'inactive' |
Retrieve a list of groups available for the user to join.
Retrieve detailed information about a specific group.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
group |
integer | REQUIRED | The ID of the group |
Create a new discipleship group.
Request Body
Update an existing group's information.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
group |
integer | REQUIRED | The ID of the group |
name |
string | OPTIONAL | Updated group name |
description |
string | OPTIONAL | Updated description |
Delete a group. Requires group leader or admin privileges.
Join a discipleship group.
Request Body
Leave a discipleship group.
Retrieve a list of all members in a group.
Response Example
Retrieve all posts and discussions within a group.
Create a new post in a group.
group_type: 'global', only organization administrators can create posts. Regular members attempting to post will receive a 403 Forbidden error.
Request Body
Error Response (Global Group - Non-Admin)
Mobile Implementation Tips
- Check the
group_typefield before showing the "Create Post" button - For global groups, verify the user is an org admin before allowing post creation
- Display a helpful message like "Only administrators can post announcements to this group"
Add a comment to a group post.
Request Body
Error Response (Global Group)
Mobile Implementation Tips
- Hide the comment input box for posts in global groups
- Check
group_type === 'global'before showing comment UI - Display a note like "Comments are disabled for organization-wide announcements"
Submit a rating for a group.
Request Body
Challenges API
Manage discipleship challenges and track user progress through various courses and activities.
Retrieve a list of all available challenges.
Response Example
Retrieve challenges available for the authenticated user.
Create a new challenge. Requires leadership or admin privileges.
Request Body
Retrieve the authenticated user's progress across all challenges.
Response Example
Enroll the authenticated user in a challenge.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
challenge |
integer | REQUIRED | The ID of the challenge |
Mark a challenge as completed.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
challenge |
integer | REQUIRED | The ID of the challenge |
Retrieve statistics for challenges (admin/leader only).
Response Example
Retrieve a list of recent challenge completions (admin/leader only).
Journal API
Manage personal journal entries for spiritual growth and reflection.
Retrieve all journal entries for the authenticated user.
Response Example
Create a new journal entry.
Request Body
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
title |
string | REQUIRED | Title of the journal entry |
content |
string | REQUIRED | Content of the journal entry |
date |
date | OPTIONAL | Date of the entry (defaults to today) |
Retrieve a specific journal entry.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
journal |
integer | REQUIRED | The ID of the journal entry |
Update an existing journal entry.
Request Body
Delete a journal entry.
Journey AI API
Leverage AI-powered insights and guidance for your spiritual journey.
Retrieve the user's spiritual journey data and milestones.
Response Example
Log a new activity or milestone in your spiritual journey.
Request Body
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
activity_type |
string | REQUIRED | Type of activity (prayer, study, service, etc.) |
duration_minutes |
integer | OPTIONAL | Duration in minutes |
notes |
string | OPTIONAL | Additional notes or reflections |
date |
date | OPTIONAL | Date of the activity (defaults to today) |
Retrieve AI-powered insights and progress analytics for your journey.
Response Example
Training API
Manage training programs, qualifications, and leadership development with rich media content and AI-generated assessments.
Retrieve all available training qualifications and certifications with full media and assessment details.
Response Example
Important Fields
| Field | Type | Description |
|---|---|---|
series |
string|null | NEW: Optional series name to group related training programs |
audio_path |
string|null | NEW: Path to audio training resource (MP3, WAV, M4A, AAC, OGG) |
video_link |
string|null | NEW: URL to video resource (YouTube, Vimeo, Dailymotion, Wistia) |
quiz_type |
string|null | NEW: Type of assessment: 'completion_consent' or 'multiple_choice' |
quiz_data |
object|null | NEW: Quiz questions with options and correct answers (for multiple_choice type) |
visibility |
string | Who can view: 'everyone', 'assigned_only', 'leadership_only', 'members_only' |
is_required_for_leadership |
boolean | Whether completion is required to be qualified as a group leader |
Quiz Types
- completion_consent: User simply confirms they have completed the training
- multiple_choice: AI-generated quiz based on training content with multiple-choice questions
Retrieve the authenticated user's progress across all qualifications, including quiz scores and completion status.
Response Example
Progress Fields
| Field | Type | Description |
|---|---|---|
quiz_score |
integer|null | User's score on the quiz (0-100) if quiz completed |
quiz_passed |
boolean | Whether the user passed the required quiz |
has_audio |
boolean | Indicates if training includes audio content |
has_video |
boolean | Indicates if training includes video content |
quiz_type |
string|null | Type of assessment required |
Enroll the authenticated user in a training qualification.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
qualification |
integer | REQUIRED | The ID of the qualification |
Update progress for a specific qualification module or requirement.
Request Body
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
qualification |
integer | REQUIRED | The ID of the qualification |
module_id |
integer | REQUIRED | The module being updated |
status |
string | REQUIRED | Status (in_progress, completed) |
Submit quiz answers for a training qualification and receive immediate scoring.
Request Body - Completion Consent
Request Body - Multiple Choice
Response Example
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
qualification |
integer | REQUIRED | The ID of the qualification |
consent |
boolean | OPTIONAL | For completion_consent type quizzes |
answers |
array | OPTIONAL | For multiple_choice type quizzes |
Mark a qualification as completed and request certification. Note: User must pass required quiz (if any) before completing.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
qualification |
integer | REQUIRED | The ID of the qualification |
Mobile Implementation Guide for Training Features
Best practices for implementing the enhanced training features in your mobile application:
1. Displaying Training Content
2. Handling Quiz Types
3. Video Platform Support
The API returns video URLs from various platforms. Your app should support embedding:
- YouTube: Convert to embed URL format
- Vimeo: Use player.vimeo.com embed URLs
- Dailymotion: Convert to embed format
- Wistia: Use fast.wistia.net embed URLs
4. Audio Playback
Supported audio formats: MP3, WAV, M4A, AAC, OGG. Implement:
- Play/pause controls
- Progress bar with seek capability
- Download option for offline access
- Playback speed controls (optional)
5. Quiz Submission Flow
6. Series Organization
Group trainings by series for better UX:
Assign a training qualification to one or more users (admin/leader only).
Request Body
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
qualification_id |
integer | REQUIRED | The ID of the qualification to assign |
user_ids |
array | REQUIRED | Array of user IDs to assign training to |
due_date |
date | OPTIONAL | Due date for completion |
Retrieve training progress for all users in your organization (admin/leader only).
Response Example
Error Handling
The API uses conventional HTTP response codes to indicate success or failure of requests.
HTTP Status Codes
| Code | Meaning |
|---|---|
| 200 | OK - Request succeeded |
| 201 | Created - Resource successfully created |
| 400 | Bad Request - Invalid request parameters |
| 401 | Unauthorized - Invalid or missing authentication token |
| 403 | Forbidden - Authenticated but insufficient permissions |
| 404 | Not Found - Resource does not exist |
| 422 | Unprocessable Entity - Validation errors |
| 429 | Too Many Requests - Rate limit exceeded |
| 500 | Internal Server Error - Something went wrong on our end |
Standard Error Response Format
Groups API Specific Error Responses
When joining or managing groups, the API returns specific error codes to help you handle business logic errors appropriately.
422 Group Full Error
Returned when attempting to join a group that has reached its maximum member capacity.
Error Response
Fields
| Field | Type | Description |
|---|---|---|
error_type |
string | Always "group_full" |
group_id |
integer | The ID of the full group |
current_members |
integer | Current number of members in the group |
max_members |
integer | Maximum members allowed (configured by system admin) |
422 Group Not Live Error
Returned when attempting to join a group that is still in draft mode and not yet accepting members.
Error Response
Fields
| Field | Type | Description |
|---|---|---|
error_type |
string | Always "group_not_live" |
group_id |
integer | The ID of the group |
status |
string | Current group status (draft, active, inactive) |
422 Leader Not Qualified Error
Returned when attempting to assign a leader to a group who has not completed required training/qualifications. This only occurs when the organization has enabled the "enforce_leader_qualifications" setting.
Error Response
Fields
| Field | Type | Description |
|---|---|---|
error_type |
string | Always "leader_not_qualified" |
leader_id |
integer | The ID of the unqualified leader |
redirect_url |
string | Suggested URL to manage qualifications/training |
422 Leader Limit Reached Error
Returned when attempting to assign a leader to a group who has already reached their maximum number of active group assignments.
Error Response
Fields
| Field | Type | Description |
|---|---|---|
error_type |
string | Always "leader_limit_reached" |
leader_id |
integer | The ID of the leader who has reached their limit |
current_groups |
integer | Number of active groups currently assigned to this leader |
max_groups |
integer | Maximum number of active groups allowed per leader (configured by system admin) |
Error Handling Best Practices
When building mobile or web applications, we recommend:
- Check error_type field: Use the
error_typefield to programmatically handle different error scenarios rather than parsing the message text. - Display user-friendly messages: The
messagefield contains human-readable text suitable for displaying to end users. - Handle redirects: When a
redirect_urlis provided, consider navigating the user to that page for resolution. - Show specific details: Use fields like
current_members,max_members,current_groups, etc. to provide context to users. - Implement retry logic: For transient errors (5xx codes), implement exponential backoff retry logic.
Example Error Handling (JavaScript)
Migration Guide: Global Groups Update
This section provides guidance for mobile developers on migrating to the new global groups architecture.
What Changed
Summary of Changes
- Added new
group_typefield to all group objects - Removed virtual group with ID 0 from API responses
- All organizations now have a real global group with an actual database ID
- Global groups are automatically sorted to the top of group lists
- Global groups have restricted functionality (admin-only posts, no comments)
Required Changes in Your Mobile App
1. Update Group Model
Add the new group_type field to your group data model:
2. Remove Virtual Group (ID 0) Handling
Search your codebase for any special handling of group ID 0 and remove it:
3. Display Global Groups Separately
Update your groups list UI to sort and display global groups at the top:
4. Restrict Post Creation for Global Groups
Only show the "Create Post" button for admins when viewing global groups:
5. Disable Comments for Global Groups
Hide comment UI for posts in global groups:
6. Hide Member List for Global Groups
For privacy, only show member count for global groups, not the full member list:
7. Prevent Edit/Delete for Global Groups
Global groups are system-managed and cannot be edited or deleted by users:
Testing Checklist
Before releasing your updated app, verify the following:
- ✅ Global groups display at the top of the groups list
- ✅ Non-admin users cannot see "Create Post" button in global groups
- ✅ Comment input is hidden for all global group posts
- ✅ Member list shows count only (not full list) for global groups
- ✅ Edit/Delete buttons are hidden for global groups
- ✅ No code references to group ID 0 remain
- ✅ Group sorting works correctly (global groups first)
Backward Compatibility
Good News
The API maintains backward compatibility for most features. Existing group endpoints continue to work, and the new group_type field is always present in responses. However, the virtual group (ID 0) has been permanently removed, so any code relying on it must be updated.
Need Help?
If you encounter issues during migration or have questions about implementing these changes:
- Review the Groups API section above for detailed endpoint information
- Contact our support team at support form
- Check the Error Handling section for API error codes
Support
Need help with the API? We're here to assist you:
- Documentation Issues: If you find errors or have suggestions for improving this documentation, please contact us.
- Technical Support: For API-related questions or issues, reach out to our support team at support form.
- Feature Requests: Have ideas for new API endpoints? We'd love to hear from you through our contact form.
Rate Limits
To ensure fair usage, API requests are rate-limited. Pro plan users receive higher rate limits. Contact support if you need increased limits for your use case.