Health check endpoints
Varmply Backend API (0.1.0)
Varmply API – MVP backend for campaigns, wallets, authentication, and influencer participation.
Common error codes: - NOT_FOUND - Resource not found (404) - VALIDATION_ERROR - Input validation failed (400) - PERMISSION_DENIED - User lacks permission (403) - CONFLICT - Resource conflict (409) - UNAUTHORIZED - Authentication required (401) - INTERNAL_SERVER_ERROR - Unexpected server error (500)
Request
Retrieve a list of campaigns available in the marketplace with joinability projections for the current user. This is a read-only endpoint that returns campaigns with their requirements and per-user joinability information. Supports filtering by platform, objective, currency, and status. Results are paginated using cursor-based pagination. Requires a valid JWT access token.
Filter campaigns by allowed platform
Filter campaigns by objective type
Filter campaigns by lifecycle status (defaults to CAMPAIGN_ACTIVE if not specified)
Maximum number of campaigns to return (1-100, default 20)
Cursor for pagination (ISO timestamp from previous response's next_cursor)
Sort order for campaigns
If true, only show campaigns where user has VALID or LIMITED integration capability
If true, only return campaigns where the user can join (canJoin === true)
- Mock serverhttps://docs-staging.varmply.com/_mock/openapi/marketplace/campaigns
- Local development serverhttp://localhost:3000/marketplace/campaigns
- Staging environmenthttps://api-staging.varmply.com/marketplace/campaigns
- Production environmenthttps://api.varmply.com/marketplace/campaigns
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs-staging.varmply.com/_mock/openapi/marketplace/campaigns?platform=INSTAGRAM&objective=CAMPAIGN_OBJECTIVE_ENGAGEMENT¤cy=NGN&status=CAMPAIGN_ACTIVE&limit=20&cursor=2024-01-01T12%3A00%3A00Z&sortBy=newest&filterByCapability=false&eligible_only=false&q=album+tour' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'Successfully retrieved marketplace campaigns
List of active campaigns available in the marketplace
Unique identifier for the campaign
Title of the campaign
Description of the campaign
Objective type for the campaign
Currency code for the campaign
Current lifecycle status of the campaign. Note: The marketplace endpoints only return campaigns with status CAMPAIGN_ACTIVE by default. The enum includes all possible campaign states for type safety, but marketplace filtering ensures only ACTIVE campaigns are visible.
Campaign start date (null if not set)
Campaign end date (null if not set)
ISO timestamp when the campaign was created
Payout rate per unit in cents (from payout formula constants)
Target budget amount in cents (from campaign targetBudgetAmountCents)
List of platforms allowed for content submission
List of required hashtags for content submission
List of required mentions for content submission
Maximum number of submissions allowed per participation
Whether the current user can join this campaign
Array of reason codes if the user cannot join (empty array if can join)
{ "campaigns": [ { … } ], "next_cursor": "2024-12-30T01:00:00Z" }
- Mock serverhttps://docs-staging.varmply.com/_mock/openapi/marketplace/campaigns/{campaignId}
- Local development serverhttp://localhost:3000/marketplace/campaigns/{campaignId}
- Staging environmenthttps://api-staging.varmply.com/marketplace/campaigns/{campaignId}
- Production environmenthttps://api.varmply.com/marketplace/campaigns/{campaignId}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://docs-staging.varmply.com/_mock/openapi/marketplace/campaigns/campaign_abc123 \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'Successfully retrieved marketplace campaign detail
Description of the campaign
Objective type for the campaign
Current lifecycle status of the campaign. Note: The marketplace endpoints only return campaigns with status CAMPAIGN_ACTIVE by default. The enum includes all possible campaign states for type safety, but marketplace filtering ensures only ACTIVE campaigns are visible.
Campaign start date (null if not set)
Campaign end date (null if not set)
ISO timestamp when the campaign was created
Payout rate per unit in cents (from payout formula constants)
Target budget amount in cents (from campaign targetBudgetAmountCents)
List of platforms allowed for content submission
List of required hashtags for content submission
List of required mentions for content submission
Maximum number of submissions allowed per participation
Array of reason codes if the user cannot join (empty array if can join)
{ "campaign_id": "campaign_abc123", "campaign_title": "Burna Boy Album Tour Promotion", "campaign_description": "Promote my upcoming album tour dates across Nigeria. Need influencers to create hype content with specific hashtags and mentions.", "campaign_objective_type": "CAMPAIGN_OBJECTIVE_ENGAGEMENT", "campaign_currency_code": "NGN", "campaign_state": "CAMPAIGN_ACTIVE", "campaign_start_date_timestamp": "2024-12-30T00:00:00Z", "campaign_end_date_timestamp": "2025-01-29T23:59:59Z", "created_at_timestamp": "2024-12-30T00:00:00Z", "payout_rate_amount_cents": 10000, "budget_amount_cents": 10000000, "requirements": { "allowed_platform_list": [ … ], "required_hashtag_list": [ … ], "required_mention_list": [ … ], "submission_limit": 3, "escrow_balance_amount_cents": 5000000 }, "joinability": { "canJoin": true, "reasons": [] } }
Request
Allow a creator to join a campaign from the marketplace. This endpoint uses MarketplaceJoinabilityEvaluator for consistency with GET /marketplace/campaigns/:id. Returns the created/updated participation with joinability snapshot. Handles idempotency: joining twice returns the existing participation. Requires authentication and creator role with verified email.
- Mock serverhttps://docs-staging.varmply.com/_mock/openapi/marketplace/campaigns/{campaignId}/join
- Local development serverhttp://localhost:3000/marketplace/campaigns/{campaignId}/join
- Staging environmenthttps://api-staging.varmply.com/marketplace/campaigns/{campaignId}/join
- Production environmenthttps://api.varmply.com/marketplace/campaigns/{campaignId}/join
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://docs-staging.varmply.com/_mock/openapi/marketplace/campaigns/campaign_abc123/join \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'Successfully joined campaign or already joined (idempotent)
Unique identifier for the participation
Unique identifier for the influencer/creator user
Current status of the participation
ISO timestamp when the participation was created
Array of reason codes if the user cannot join (empty array if can join)
{ "participation_id": "participation_xyz789", "campaign_id": "campaign_abc123", "influencer_user_id": "user_123", "participation_status": "PARTICIPATION_STATUS_APPROVED", "created_at_timestamp": "2024-01-01T00:00:00Z", "joinability": { "canJoin": false, "reasons": [ … ] } }
Request
Allow a creator to attempt to join a campaign via the marketplace. This endpoint uses the eligibility evaluator to determine if the creator can participate. Returns 200 OK with either:
eligible: trueandparticipationobject if eligibleeligible: falsewithreasonCodeand optionalmetadataif ineligible No HTTP 400s for business rules - all outcomes return 200 with structured response. Requires a valid JWT access token.
- Mock serverhttps://docs-staging.varmply.com/_mock/openapi/campaigns/{campaignId}/join
- Local development serverhttp://localhost:3000/campaigns/{campaignId}/join
- Staging environmenthttps://api-staging.varmply.com/campaigns/{campaignId}/join
- Production environmenthttps://api.varmply.com/campaigns/{campaignId}/join
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://docs-staging.varmply.com/_mock/openapi/campaigns/campaign_abc123/join \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{}'Join attempt result (eligible or ineligible)
Unique identifier for the participation
Unique identifier for the campaign
Unique identifier for the influencer user
Current status of the participation
List of content submissions for this participation
Platform where the content was posted
URL to the content
When the content was submitted
When the content was posted (null if not yet posted)
Array of hashtags declared in the content submission
Array of mentions declared in the content submission
Content type declared by the influencer during submission
Status of the submission. Submissions start as PENDING and transition to ACCEPTED or REJECTED based on campaign requirements validation.
Reason for rejection if submissionStatus is REJECTED. Possible values: CAMPAIGN_NOT_ACTIVE, SUBMISSION_LIMIT_REACHED, CONTENT_TYPE_NOT_ALLOWED, MISSING_REQUIRED_HASHTAGS, MISSING_REQUIRED_MENTIONS, INTEGRATION_NOT_ELIGIBLE
When the participation was created
{ "eligible": true, "participation": { "participationId": "participation_xyz789", "campaignId": "campaign_abc123", "influencerUserId": "user_123", "participationStatus": "PARTICIPATION_STATUS_APPROVED", "contentSubmissionList": [], "createdAtTimestamp": "2024-01-01T00:00:00Z", "lastUpdatedAtTimestamp": "2024-01-01T00:00:00Z" } }