CLI
Interact with Markidy directly from your terminal. Search listings and profiles, send listing or profile requests, and manage conversations without leaving the command line.
Installation
Install the CLI globally using npm:
npm install -g @markidy/cliOr run it directly without installing:
npx @markidy/cli <command>Setup
Authenticate with your API key from your dashboard:
markidy loginThis stores your API key in ~/.markidy/config.json for all
future commands.
Commands
Account
markidy loginSave your API key locally.
markidy logoutRemove saved credentials.
markidy channels ReadList your connected channels. The markidy channel enables API-based automation and AI-assisted messaging.
Other channels include telegram and discord.
markidy webhooks ReadList your registered webhooks.
Profiles
markidy profiles search [query] ReadSearch verified public profiles.
--sortrelevance | trust | recent | posts--countryCountry code, comma-separated for multiple values--has-careerOnly return profiles with career entries--open-toRecruiting open-to values, comma-separated--rolesDesired role tags, comma-separated--skillsSkill tags, comma-separated--senioritySeniority values, comma-separated--work-modeWork mode values, comma-separated--availabilityAvailability values, comma-separated--min-experience-monthsMinimum total career experience in months--max-experience-monthsMaximum total career experience in months--locationPreferred work location text match--pagePage number--page-sizeResults per page (max 50)--roles and --skills use the recruiting tag index for formatting variants such as Node.js, nodejs, and node; semantic aliases such as PM and Product Manager are not automatically expanded.
Enums: --sort = relevance|trust|recent|posts; --open-to = actively_looking|open_to_offers|not_looking|hiring_only; --seniority = intern|junior|mid|senior|lead|executive; --work-mode = remote|hybrid|onsite|flexible; --availability = immediately|one_month|three_months|not_specified.
markidy profiles get <user-id> ReadView public profile detail including recruitingPreferences, trustLinks, profileRequestPolicy, activeChannels, and myProfileRequest.
Categories
markidy categories ReadBrowse all categories and roles.
markidy categories get <key> ReadGet category detail with required fields and value formats.
Listings
markidy listings search [query] ReadSearch listings. All parameters are optional.
--category Category key--role Role key--country Country codes, comma-separated (e.g. US,JP)--verified Verification level (0, 1, 2)--sort recent | views | requests | trust (default: trust)--meta Field filters as key=value (repeatable). Use _min/_max
for NUMBER/DATE range, _lat/_lng for GEO (use markidy geocode when starting from raw place text)--page Page number (default: 1)--page-size Results per page (default: 16, max: 50)markidy listings get <id> ReadView listing details including profile.userId, which can be passed to markidy profiles get <user-id>.
markidy listings mine ReadList your own listings.
--status ACTIVE, PAUSED, PENDING--page Page numbermarkidy listings create WriteCreate a new listing. Required: --category, --role, --meta,
--channels. For complex fields, prefer structured JSON that matches markidy categories get and its acceptedValueFormats.
--category required Category key--role required Role key--meta required Field values as key=value (repeatable)--channels required Connected channels (comma-separated)--webhook-ids Webhook IDs (comma-separated)markidy listings update <id> WriteUpdate a listing. Required: --meta, --channels. Complex fields can use structured JSON or legacy JSON strings.
--meta required Updated field values as key=value (repeatable)--channels required Updated channels (comma-separated)--webhook-ids Webhook IDs (comma-separated)markidy listings status <id> <ACTIVE|PAUSED> WritePause or resume a listing.
markidy listings delete <id> WriteDelete a listing permanently.
Match Requests
markidy requests send <listing-id> WriteSend a match request. Required: --channels, --message
--channels required Channel types (comma-separated)--message required Request message (max 500 chars)markidy requests send-profile <profile-user-id> WriteSend a profile request. Required: --channels, --message
markidy requests mine ReadView your sent requests.
--subject LISTING or PROFILE--status PENDING, ACCEPTED, REJECTED--listing Filter by listing ID--profile Filter by target profile owner user ID--page Page number (default: 1)--page-size Results per page (default: 16, max: 50)markidy requests incoming-profile <profile-user-id> ReadView incoming requests on your profile.
markidy requests incoming <listing-id> ReadView incoming requests on your listing.
--status PENDING, ACCEPTED, REJECTED--page Page number (default: 1)--page-size Results per page (default: 16, max: 50)markidy requests respond <id> <accept|reject> WriteAccept or reject a request.
--reason Rejection reasonConversations
markidy conversations ReadList your conversations.
--subject LISTING or PROFILE--listing Filter by listing ID--profile Filter by profile owner user IDmarkidy conversations get <id> ReadView conversation messages.
--limit Number of messages--before Cursor for paginationmarkidy conversations send <id> WriteSend a message. Required: --message
--message required Message contentmarkidy conversations delete <id> WriteLeave a conversation. The other party will see otherLeft: true and can no longer send messages.
Tools
markidy geocode <query> ReadConvert an address or place name to lat/lng coordinates. Use it for GEO search filters or when you need to build a GEO field from raw text.
Usage Flows
Listing Seeker Flow
markidy categoriesBrowse available categoriesmarkidy geocodeOptional: convert raw address to lat/lng (for GEO fields)markidy listings searchSearch with filters (+ GEO meta)markidy listings get <id>View detail, profile.userId, and channelsmarkidy profiles get <user-id>Optional: inspect the owner profile using listing.profile.userIdmarkidy requests send <id>Send request to ownermarkidy requests minePoll for statusmarkidy conversationsFind conversation (after accepted)markidy conversations send <id>Send a messageProfile Contact Flow
markidy profiles searchSearch candidates with sourcing filtersmarkidy profiles get <user-id>Check policy, channels, and existing requestmarkidy requests send-profile <user-id>Send only when profileRequestPolicy.canRequest is truemarkidy requests mine --subject PROFILEPoll profile request statusmarkidy conversations --subject PROFILEContinue after acceptanceCreator Flow
markidy channelsCheck connected channelsmarkidy categories get <key>Check required fields and value encodingmarkidy webhooksGet webhook IDs (optional)markidy listings createCreate listing with status PENDINGManagement Flow
markidy listings mineCheck listing statusesmarkidy requests incoming <id>View incoming requestsmarkidy requests respond <id> acceptAccept or rejectmarkidy conversationsFind conversation (after accepting)markidy conversations send <id>Reply to requestermarkidy conversations delete <id>Leave conversationmarkidy listings status <id> PAUSEDOptionally pause listingExamples
# Browse all categories
markidy categories
# Get detail for a category (see available roles & input fields)
markidy categories get jobs
# Search by keyword
markidy listings search "mentor"
# Search with filters
markidy listings search --category jobs --role employer --country KR,JP --sort trust
# Filter by meta fields
markidy listings search --category housing --role host --meta monthly-rent_min=500 --meta monthly-rent_max=1500
# Pagination
markidy listings search --category jobs --page 2 --page-size 10
# View a specific listing
markidy listings get lst_abc123
# Inspect the listing owner profile from listing.profile.userId
markidy profiles get usr_123# Send a match request
markidy requests send lst_abc123 --channels telegram,discord --message "Hi, I'm interested"
# Check your sent requests
markidy requests mine
markidy requests mine --status PENDING --page 1 --page-size 5
# View incoming requests on your listing
markidy requests incoming lst_abc123 --status PENDING
# Accept or reject
markidy requests respond req_xyz789 accept
markidy requests respond req_xyz789 reject --reason "Not a good fit"# Step 1: Check your channels & webhooks
markidy channels
markidy webhooks
# Step 2: Find category keys and required fields
markidy categories
markidy categories get mentoring
# Step 3: Create a listing
markidy listings create \
--category mentoring --role mentor \
--channels markidy \
--meta headline="Product mentor for early-stage founders" \
--meta about-me="<p>I help teams ship faster with better product decisions.</p>" \
--meta format=Remote \
--meta rate="$50-$100 / hour" \
--webhook-ids wh_abc123
# View your listings
markidy listings mine
markidy listings mine --status ACTIVE
# Update a listing
markidy listings update lst_abc123 --meta format=Hybrid --channels markidy
# Pause / Resume
markidy listings status lst_abc123 PAUSED
markidy listings status lst_abc123 ACTIVE
# Delete
markidy listings delete lst_abc123# List all conversations
markidy conversations
# Filter by listing
markidy conversations --listing lst_abc123
# Read messages (last 20)
markidy conversations get conv_xyz789 --limit 20
# Reply
markidy conversations send conv_xyz789 --message "Sounds great, let's connect!"
# Leave a conversation
markidy conversations delete conv_xyz789# Convert address to coordinates (for GEO meta search)
markidy geocode "San Francisco, CA"
# Then use coordinates in search
markidy listings search --category jobs --role employer --meta work-location_lat=37.77 --meta work-location_lng=-122.42Global Options
| Option | Description |
|---|---|
--api-key <key> | Override stored API key for this command |
--json | Output raw JSON instead of formatted text |
--help | Show help for any command |