Skip to main content
Use this page to integrate directly with MemePerfect’s external API. If you are integrating for the first time, start with the end-to-end API Walkthrough, then use this page as endpoint reference.
Illustration for developer API key section

Use the external API to manage Strategies and consume alert outcomes from your own systems.

Base URL

Getting an API key

  1. Open Settings in the app.
  2. Go to API Access.
Developer API key generation screen

Generate your API key from Settings.

  1. Create or regenerate your API key.
Generated API key shown in the dashboard

The full key is only shown at generation time.

  1. Store it securely.
Never expose API keys in browser code or public repositories.

Authentication

The API accepts one of these header formats:
X-MP-API-Key is not accepted. Use X-API-Key or Authorization: ApiKey ....

Rate limits and plan limits

Limits are plan-based and enforced per API key:
  • PRO: 60 requests per minute, up to 25 active Strategies
  • DEGEN: 300 requests per minute, up to 50 active Strategies
  • Backtests: PRO gets 25 jobs per UTC day with a 7-day lookback; DEGEN gets unlimited daily jobs with a 14-day lookback
Check current limits with GET /me.

Common error shape

Validation and auth errors use this structure:

Endpoint reference

Lifecycle order:
  1. GET /me
  2. POST /strategies
  3. POST /strategies/:id/activate
  4. GET /strategy-evaluations
  5. POST /backtests and GET /backtests/:id/results
  6. GET /notifications and GET /notifications/:id
  7. GET /notifications/performance or async performance jobs
  8. PUT /webhook
  9. POST /strategies/:id/deactivate

GET /me

Returns authenticated user plan and limits.

GET /strategies

Returns all Strategies for the authenticated user and activeCount.

POST /strategies

Creates a new Strategy. Required body fields:
  • name (string)
  • triggers (array)
  • rules (array)
  • isActive (boolean)
Send rules as one flat list. MemePerfect organizes them into:
  • dealbreakers
  • product rule groups such as Security, Market, Volume/Activity, Clusters, Socials, and AI
Rule item shape:
  • rule (string, required)
  • dealbreaker (boolean, required)
  • enabled (boolean, optional. enabled: false skips any rule type)
  • min / max (number, numeric rules only)
  • value (string, enum rules only: risk_level, launch_platform)
  • operator (string, enum rules only: equals or not_equals; defaults to equals)
  • config (object, advanced market, volume/activity, and wallet-quality rules only)
  • clusterConfig (object, coordinated wallet cluster rules only)
Advanced rule examples:
These rules cannot be submitted as dealbreakers:
  • Website Shows CA
  • Website Contains $Token Name
  • Website Content Validity Score
  • X Link Contains CA
  • X Link Contains $Token Name
  • X Views
  • X Followers
  • X Community Size
  • X Community Views
  • X (Twitter) Content Validity Score
  • Coordinated Wallet Cluster
  • Quality Wallets
  • Quality Wallet Buy Value
  • Quality Wallet Win Rate
Optional trigger config map:
  • triggerConfigs.twitter_mention_direct.tagId is required for twitter_mention_direct; use "all" or a Twitter tag id.
  • triggerConfigs.tweet_metadata_match.tagId is required for tweet_metadata_match; use "all" or a Twitter tag id.
  • triggerConfigs.followed_dev_new_token_created.scope is optional and accepts "all", "tag", or "wallet".
  • triggerConfigs.followed_dev_new_token_created.tagId is required when scope is "tag"; use a dev tag id from GET /devs/tags.
  • triggerConfigs.followed_dev_new_token_created.developerAddress is required when scope is "wallet"; the wallet must be in your followed developers list.
If triggerConfigs.followed_dev_new_token_created is omitted, the followed-dev trigger behaves as scope: "all". Important strategy-level options:
  • strict (optional, boolean)
  • alertCooldownMins (optional, number 0 to 1440)
Allowed trigger eventType values:
  • new_token_created
  • followed_dev_new_token_created
  • twitter_mention_direct
  • tweet_metadata_match
  • token_almost_graduated
  • token_graduated
Followed developer trigger examples:
Twitter trigger example:
The response may include dealbreakers and ruleGroups; these are generated from your rules[] payload.

GET /strategies/:id

Returns one Strategy by UUID.

PATCH /strategies/:id

Partially updates a Strategy. Uses the same schema as POST /strategies, but all fields are optional. Replacement semantics:
  • If rules is included, MemePerfect fully replaces the strategy’s saved rules.
  • If rules is explicitly [], MemePerfect clears the strategy’s saved rules.
  • If triggers is included, MemePerfect fully replaces the strategy’s saved triggers.
  • If rules or triggers are omitted, existing values remain unchanged.
Clear all rules example:

POST /strategies/:id/activate

Activates a Strategy.

POST /strategies/:id/deactivate

Deactivates a Strategy.

DELETE /strategies/:id

Deletes a Strategy.

GET /strategy-evaluations

Lists persisted Strategy evaluation snapshots for the authenticated user. Use this to review matched and failed evaluations without calling the current market-cap, ATH, or performance endpoints.
This endpoint is optimized for recent evaluation history. Prefer hasMore and nextCursor for pagination. The exact total is returned as null.
Evaluation history only returns records from the last day. The from filter is limited to that retention window.
Query parameters:
  • page (optional, default 1; used when cursor is not provided)
  • pageSize (optional, default 50, max 100)
  • limit (optional alias for pageSize; pageSize wins when both are sent)
  • cursor (optional opaque value returned as nextCursor; use with the same filters and sort)
  • sortBy (createdAt | matched | evaluationTimeMs | tokenAddress | strategyId | mcap | liquidity, optional)
  • sortDir (asc | desc, optional)
  • matched (true | false, optional)
  • strategyId (Strategy UUID, optional)
  • address (token address exact match, or partial match when % is present, optional)
  • datetime (ISO datetime one-minute window, or YYYY-MM-DD UTC day window, optional)
  • dealbreakerFailed (true | false, optional)
  • failedGroupIds (CSV or repeated query parameter; matches exactly that failed-group set, optional)
  • from / to (strict ISO 8601 createdAt bounds, optional; from must be before or equal to to)
This endpoint returns stored evaluation state only. It does not include currentMcap, athPrice, athMcap, athAt, currentMultiple, or athMultiple, and it does not expose /mcaps, /performance, or /analyze under the external Strategy Evaluations API. To fetch the next page, pass the previous response’s nextCursor with the same filters and sort:

GET /backtests

Lists async backtest jobs for the authenticated user. Query parameters:
  • page (optional, default 1; fixed page size 20)
metrics.winnersNow is retained for response compatibility. For disk-backed backtests it represents winners inside the effective snapshot window, not a live market lookup.

POST /backtests

Queues a backtest job for one of your Strategies. The API stores a strategy snapshot when the job is created, so later edits to the live Strategy do not change that backtest run. Backtests replay hourly disk snapshots built from completed UTC hours. If your requested window overlaps available snapshot coverage, the returned job from and to are clamped to the available slice. If there is no overlap, the API returns 400 with the available range.
PRO users can create 25 backtests per UTC day with a 7-day lookback. DEGEN users have unlimited daily backtests with a 14-day lookback.
Required body fields:
  • strategyId (Strategy UUID owned by the API-key user)
  • from / to (ISO 8601 datetimes)
  • labelDefinition.threshold (number; snapshot-window winner multiple threshold)
  • options (object; send {} when you do not need options)
Optional options fields:
  • eventType (string)
  • strictOverride (boolean)

GET /backtests/:id

Returns one backtest job owned by the authenticated user.
Missing or cross-user backtest IDs return 404.

GET /backtests/:id/results

Returns paginated stored backtest result rows plus todayCount. Backtest results store matches and missed winners only:
  • matched tokens, including true positives and false positives
  • non-matched tokens whose snapshot-window currentMultiple reaches the threshold, meaning missed winners
Non-matched non-winners are counted in job metrics but are not stored as result rows. The response total is the stored-row count after filters; use the job metrics.tested field for the full evaluated-token count. Query parameters:
  • page (optional, default 1)
  • pageSize (optional, default 50, max 200)
  • matched (true | false | all, optional)
  • winnersInWindow (true | false | all, optional; preferred)
  • winnersNow (true | false | all, optional; backward-compatible alias for winnersInWindow)
  • minMultiple / maxMultiple (optional)
  • token (optional token-address search)
  • sortBy (evaluationTimestamp | multiple | matched, optional)
  • sortDir (asc | desc, optional)
sortBy=multiple, minMultiple, maxMultiple, winnersInWindow, and winnersNow use currentMultiple, which is calculated from the token’s highest market cap during the backtest window compared with its market cap when it was evaluated. It is not a live Birdeye multiple.

GET /twitter/handles

Read-only list of tracked Twitter handles for the authenticated user. Query parameters:
  • search (optional)
  • tagId (optional)
  • status (active | inactive, optional)
  • sortBy (handle | addedAt | lastUpdated, optional)
  • sortOrder (asc | desc, optional)

GET /twitter/tags

Read-only Twitter tags. Returns both user and platform tags by default. Query parameters:
  • scope (all | user | platform, default all)
  • includeCounts (boolean, default true)
  • sortBy (name | createdAt | handleCount, default name)
  • sortOrder (asc | desc, default asc)

GET /devs/my

Lists your followed developers. Query parameters:
  • page (optional, default 1)
  • limit (optional, default 20)
  • isActive (optional)

GET /devs/tags

Returns your developer tags.

GET /devs/:address/tags

Returns tag IDs currently assigned to a followed dev wallet.

POST /devs/:address/add

Adds a wallet to your followed developers list.

PUT /devs/:address/update

Updates alias and/or active status for a followed dev wallet.

PUT /devs/:address/tags

Replaces assigned tag IDs for a followed dev wallet.

GET /notifications

Lists notifications with pagination and optional filtering. Query parameters:
  • page (optional, default 1)
  • limit (optional, default 20, max 100)
  • source (optional, default all; allowed: all, personal, official)
  • strategyId (optional)
  • triggerType (optional)
By default, this endpoint returns both personal alerts and official alerts from official strategies you are subscribed to. Use source=personal or source=official when you want only one alert source.

GET /notifications/:id

Returns one notification for the authenticated user, including live performance snapshot. Query parameters:
  • source (optional, default all; allowed: all, personal, official)
  • view (optional, default full; allowed: full, summary)

GET /notifications/performance

Returns performance summary for one Strategy and one range. Required query parameters:
  • strategyId (string)
  • range (daily | weekly | monthly | quarterly)

POST /notifications/performance/jobs

Creates an async performance job. Required query parameters:
  • strategyId (string)
  • range (daily | weekly | monthly | quarterly)

GET /notifications/performance/jobs/:jobId

Returns async performance job status and result when completed.
When status is completed, the response includes:
  • result.overall
  • result.buckets
  • result.topTokens

GET /webhook

Returns webhook configuration for the authenticated user.

PUT /webhook

Updates webhook configuration. Body fields:
  • enabled (required, boolean)
  • url (optional, string or null)
Behavior notes:
  • Set url to null to clear webhook config and secret.
  • When URL changes, backend attempts verification and may return verificationError.
  • A new secret is only returned when generated or rotated.

Error cases to handle

Your client should handle at least these responses:
  • 400 validation errors (invalid body, query, or path params)
  • 401 missing or invalid API key
  • 403 no active subscription or plan limit reached
  • 404 resource not found (or belongs to another user)
  • 429 throttled (Rate limit exceeded)

API Walkthrough

Full integration flow from create to activate, observe, webhook, and deactivate.

Webhooks

Webhook payload format, signing, and verification flow.

Strategy Rules Spec

Rule payload schema, supported ruleType IDs, operators, and value formats.

AI Agent

Build agent workflows on top of Strategy and notification outputs.