REST API
Integrate with Markidy programmatically using our RESTful API. Search listings and profiles, send listing or profile requests, and manage conversations.
🧪 Try the API interactively in the API Playground →Base URL
https://api.markidy.com/v1All API requests must use HTTPS and include your API key in the Authorization header.
curl https://api.markidy.com/v1/listings/search?category=jobs \
-H "Authorization: Bearer mk_your_api_key" \
-H "Content-Type: application/json"Response Format
All successful responses return JSON. List endpoints include pagination:
{
"listings": [ ... ],
"total": 45,
"page": 1,
"pageSize": 16
}Error responses include a code and human-readable error:
{
"code": "VALIDATION_ERROR",
"error": "Validation failed",
"details": [
{ "field": "channels", "issue": "telegram is not connected" }
]
}Location-Based Search
Use the GET /v1/geocode endpoint to convert addresses into coordinates,
then pass them as meta filters to search by proximity.
# Step 1: Convert address to coordinates
curl "https://api.markidy.com/v1/geocode?q=San+Francisco" \
-H "Authorization: Bearer mk_your_api_key"
# Step 2: Search with GEO filter (results sorted by distance)
curl "https://api.markidy.com/v1/listings/search?category=jobs&role=employer&meta.work-location_lat=37.77&meta.work-location_lng=-122.42" \
-H "Authorization: Bearer mk_your_api_key"When a GEO filter is active, results are sorted by distance (nearest first).
Each listing includes a distanceKm field (null when no GEO filter is used).
Conversation Status
When a user deletes (leaves) a conversation, the other party sees otherLeft: true.
Sending messages to a left conversation returns 403.
curl -X DELETE "https://api.markidy.com/v1/conversations/{id}" \
-H "Authorization: Bearer mk_your_api_key"
# Response: { "success": true }
# Other party will see: "otherLeft": trueWhat Can You Build?
Apps & Workflows
Let apps, assistants, and workflows browse listings, send match requests, and manage matching automatically.
Webhook Automation
Receive real-time notifications for new match requests and automate your response pipeline.
Custom Tooling
Build CLI tools, bots, or dashboards that interact with Markidy.
Usage Flows
Listing Seeker Flow
GET /v1/listings/search?q=...Search for listingsGET /v1/categoriesBrowse categories for filtersGET /v1/categories/{key}Get fields for meta.* filteringGET /v1/geocode?q=...Convert address to lat/lng for GEO fieldsGET /v1/listings/{id}Check detail + profile.userId + channels + existing requestGET /v1/profiles/{userId}Use listing.profile.userId to inspect the owner profilePOST /v1/match-requestsSend request (if myRequest is null)GET /v1/match-requests/minePoll for status updatesGET /v1/conversationsFind conversation (after accepted)POST /v1/conversations/{id}/messagesSend a messageProfile Sourcing Flow
GET /v1/profiles/searchSearch candidates with sourcing filtersGET /v1/profiles/{userId}Inspect detail, recruiting info, and request policyprofileRequestPolicyCheck canRequest, required verification, and reasonactiveChannelsChoose an available channelmyProfileRequestAvoid duplicate requestsPOST /v1/profile-requestsSend a profile requestGET /v1/match-requests/mine?subjectType=PROFILEPoll status updatesGET /v1/conversations?subjectType=PROFILEContinue after acceptanceCreator Flow
GET /v1/categoriesFind target categoryGET /v1/categories/{key}Check role fields, required flags, and value encodingGET /v1/me/channelsVerify connected channelsGET /v1/webhooksGet webhook IDs (optional)POST /v1/listingsCreate listing with status PENDINGManagement Flow
GET /v1/listings/mineCheck my listing statusesGET /v1/match-requests/listing/{id}View incoming requestsPATCH /v1/match-requests/{id}/statusAccept or rejectGET /v1/conversationsFind conversation (after accepting)POST /v1/conversations/{id}/messagesReply to requesterPATCH /v1/listings/{id}/statusPause / Resume listingPATCH /v1/listings/{id}Update meta and return to PENDING for re-reviewDELETE /v1/conversations/{id}Leave conversation (otherLeft for other party)DELETE /v1/listings/{id}Delete listing