API reference

Personas

A persona is one type of buyer you want to reach, like tipsters or agency owners. Gemlead finds leads for every active persona and scores them against its description. Its sources decide where Gemlead looks.

An owner with several X accounts can share a persona between them. They work from the same sources, settings and leads, each with its own campaigns, and a lead goes to one X account only. Persona sharing sets which X accounts share it.

The persona object

A type of buyer you want to reach. Gemlead looks for leads that match each active persona and scores them against it.

Attributes

  • idstring
    Unique identifier for the persona.
  • objectstring
    Always persona.
  • namestring
    The persona's short name, like Tipsters.
  • descriptionstring
    Who this buyer is, in your words. Scoring reads it.
  • marketstring
    Whether you sell to businesses or to consumers.
    b2bb2c
  • statusstring
    Whether Gemlead is looking for leads for this persona.
    activepaused
  • websitestring or null
    The website of what you sell to this persona.
  • statsobject
    Counts since the persona was created, and for today in your profile's time zone.
  • sharingobject
    The X accounts of the owner that share the persona. See persona sharing.
  • created_atstring
    When the persona was created, ISO 8601.
  • updated_atstring
    When the persona last changed, ISO 8601.
Persona object
{
  "id": "lvWBPnytpS",
  "object": "persona",
  "name": "Tipsters",
  "description": "Sports and trading tipsters who sell picks or signals to a paying community.",
  "market": "b2c",
  "status": "active",
  "website": "https://example.com",
  "stats": {
    "leads_found": 18420,
    "leads_scored": 17960,
    "hot_leads": 2134,
    "avg_score": 41,
    "today": {
      "leads_found": 312,
      "hot_leads": 38,
      "dms_sent": 25,
      "replies": 4
    }
  },
  "sharing": {
    "home_account": {
      "id": "a9PzK2vRtM",
      "username": "acme"
    },
    "shared_with": [
      {
        "id": "Hq4TnW8cLm",
        "username": "acme_sales"
      }
    ]
  },
  "created_at": "2026-09-14T09:21:05.300Z",
  "updated_at": "2026-11-06T07:45:12.904Z"
}

List personas

GET/v1/personasread scopeMCPlist_personas

Returns your personas in the order of your Personas page.

Query parameters

  • limitinteger
    How many objects to return, from 1 to 100. Defaults to 25.
  • cursorstring
    The next_cursor of the previous page, to get the page after it. See Pagination.

Returns

A list of persona objects.

GET/v1/personas
curl https://gemlead.ai/api/v1/personas \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "object": "list",
  "data": [
    {
      "id": "lvWBPnytpS",
      "object": "persona",
      "name": "Tipsters",
      "description": "Sports and trading tipsters who sell picks or signals to a paying community.",
      "market": "b2c",
      "status": "active",
      "website": "https://example.com",
      "stats": {
        "leads_found": 18420,
        "leads_scored": 17960,
        "hot_leads": 2134,
        "avg_score": 41,
        "today": {
          "leads_found": 312,
          "hot_leads": 38,
          "dms_sent": 25,
          "replies": 4
        }
      },
      "sharing": {
        "home_account": {
          "id": "a9PzK2vRtM",
          "username": "acme"
        },
        "shared_with": [
          {
            "id": "Hq4TnW8cLm",
            "username": "acme_sales"
          }
        ]
      },
      "created_at": "2026-09-14T09:21:05.300Z",
      "updated_at": "2026-11-06T07:45:12.904Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Retrieve a persona

GET/v1/personas/:idread scopeMCPget_persona

Returns one persona with its stats.

Path parameters

  • idstringRequired
    The persona's ID.

Returns

A persona object.

Errors

GET/v1/personas/:id
curl https://gemlead.ai/api/v1/personas/lvWBPnytpS \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "id": "lvWBPnytpS",
  "object": "persona",
  "name": "Tipsters",
  "description": "Sports and trading tipsters who sell picks or signals to a paying community.",
  "market": "b2c",
  "status": "active",
  "website": "https://example.com",
  "stats": {
    "leads_found": 18420,
    "leads_scored": 17960,
    "hot_leads": 2134,
    "avg_score": 41,
    "today": {
      "leads_found": 312,
      "hot_leads": 38,
      "dms_sent": 25,
      "replies": 4
    }
  },
  "sharing": {
    "home_account": {
      "id": "a9PzK2vRtM",
      "username": "acme"
    },
    "shared_with": [
      {
        "id": "Hq4TnW8cLm",
        "username": "acme_sales"
      }
    ]
  },
  "created_at": "2026-09-14T09:21:05.300Z",
  "updated_at": "2026-11-06T07:45:12.904Z"
}

Create a persona

POST/v1/personaswrite scopeMCPcreate_persona

Creates a persona and starts finding its leads right away. Scoring uses up to 2 credits a lead: 1 for the first pass, 1 more for the deep score when it passes, up to daily_scoring_limit leads a day. Add sources now or later with Add a source.

Body parameters

  • namestringRequired
    The persona's name, one to three words like Ghostwriters, up to 100 characters.
  • websitestring
    Your product's website, up to 500 characters. The AI that scores leads reads it.
  • descriptionstringRequired
    Who this buyer is, in plain words. The AI scores every lead from 0 to 100 against it, so it matters most. It can hold your own scoring rules. Up to 12 000 characters.
  • marketstring
    b2b when businesses buy, b2c when people buy for themselves. Default b2b.
    b2bb2c
  • keywordsarray of strings
    Words in a profile or its posts that signal a fit. Up to 100, each up to 100 characters.
  • competitorsarray of strings
    Products like yours, someone who uses one is a fit. Up to 100.
  • avoidarray of strings
    Who to score low, like agencies or students. Up to 100.
  • min_followersinteger
    Profiles with fewer followers are not scored, 0 to 10 000 000. Default 100.
  • include_closed_inboxesboolean
    Score people with closed DMs too, a campaign reaches them with a comment. Default true.
  • auto_expandboolean
    Let Gemlead add sources by itself from the best leads when the others run dry. Default false.
  • auto_expand_directionstring
    Where auto expand goes next, in plain words like more US founders. Up to 500 characters.
  • daily_scoring_limitinteger
    The most leads scored a day for this persona, up to 2 credits a lead: 1 for the first pass, 1 more for the deep score when it passes. 100 to 20 000. By default your plan's pace, 3 300 a day on Starter and 10 000 on Business.
  • sourcesarray of objects
    Up to 20 starting sources. Investor, accelerator and media accounts are refused, they bring no buyers.

Returns

The new persona object.

Errors

POST/v1/personas
curl -X POST https://gemlead.ai/api/v1/personas \
  -H "Authorization: Bearer $GEMLEAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Tipsters",
    "description": "Sports and trading tipsters who sell picks or signals to a paying community.",
    "market": "b2c",
    "keywords": ["tipster", "betting tips"],
    "sources": [
      {
        "username": "pickswithmike"
      }
    ]
  }'
Response200
{
  "id": "lvWBPnytpS",
  "object": "persona",
  "name": "Tipsters",
  "description": "Sports and trading tipsters who sell picks or signals to a paying community.",
  "market": "b2c",
  "status": "active",
  "website": "https://example.com",
  "stats": {
    "leads_found": 18420,
    "leads_scored": 17960,
    "hot_leads": 2134,
    "avg_score": 41,
    "today": {
      "leads_found": 312,
      "hot_leads": 38,
      "dms_sent": 25,
      "replies": 4
    }
  },
  "sharing": {
    "home_account": {
      "id": "a9PzK2vRtM",
      "username": "acme"
    },
    "shared_with": [
      {
        "id": "Hq4TnW8cLm",
        "username": "acme_sales"
      }
    ]
  },
  "created_at": "2026-09-14T09:21:05.300Z",
  "updated_at": "2026-11-06T07:45:12.904Z"
}

Activate a persona

POST/v1/personas/:persona_id/activatewrite scopeMCPupdate_persona

Starts a paused persona again. Its sources are read and its leads scored.

Path parameters

  • persona_idstringRequired
    The persona's ID.

Returns

The persona object.

Errors

POST/v1/personas/:persona_id/activate
curl -X POST \
  https://gemlead.ai/api/v1/personas/lvWBPnytpS/activate \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "id": "lvWBPnytpS",
  "object": "persona",
  "name": "Tipsters",
  "description": "Sports and trading tipsters who sell picks or signals to a paying community.",
  "market": "b2c",
  "status": "active",
  "website": "https://example.com",
  "stats": {
    "leads_found": 18420,
    "leads_scored": 17960,
    "hot_leads": 2134,
    "avg_score": 41,
    "today": {
      "leads_found": 312,
      "hot_leads": 38,
      "dms_sent": 25,
      "replies": 4
    }
  },
  "sharing": {
    "home_account": {
      "id": "a9PzK2vRtM",
      "username": "acme"
    },
    "shared_with": [
      {
        "id": "Hq4TnW8cLm",
        "username": "acme_sales"
      }
    ]
  },
  "created_at": "2026-09-14T09:21:05.300Z",
  "updated_at": "2026-11-06T07:45:12.904Z"
}

Pause a persona

POST/v1/personas/:persona_id/pausewrite scopeMCPupdate_persona

Pauses a persona. Gemlead stops reading its sources and scoring its leads, and its leads stay.

Path parameters

  • persona_idstringRequired
    The persona's ID.

Returns

The persona object, its status at paused.

Errors

POST/v1/personas/:persona_id/pause
curl -X POST \
  https://gemlead.ai/api/v1/personas/lvWBPnytpS/pause \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "id": "lvWBPnytpS",
  "object": "persona",
  "name": "Tipsters",
  "description": "Sports and trading tipsters who sell picks or signals to a paying community.",
  "market": "b2c",
  "status": "paused",
  "website": "https://example.com",
  "stats": {
    "leads_found": 18420,
    "leads_scored": 17960,
    "hot_leads": 2134,
    "avg_score": 41,
    "today": {
      "leads_found": 312,
      "hot_leads": 38,
      "dms_sent": 25,
      "replies": 4
    }
  },
  "sharing": {
    "home_account": {
      "id": "a9PzK2vRtM",
      "username": "acme"
    },
    "shared_with": [
      {
        "id": "Hq4TnW8cLm",
        "username": "acme_sales"
      }
    ]
  },
  "created_at": "2026-09-14T09:21:05.300Z",
  "updated_at": "2026-11-06T07:45:12.904Z"
}

Delete a persona

DELETE/v1/personas/:persona_idwrite scopeMCPdelete_persona

Deletes a persona with its sources and the leads no campaign worked on. Its campaigns are archived. This cannot be undone.

Path parameters

  • persona_idstringRequired
    The persona's ID.

Returns

An object with the persona's id, deleted set to true, and the counts of archived_campaigns and deleted_sources. Its leads are deleted in the background, so deleted_leads is null and they can still show in List leads for a few minutes.

Errors

DELETE/v1/personas/:persona_id
curl -X DELETE https://gemlead.ai/api/v1/personas/lvWBPnytpS \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "id": "lvWBPnytpS",
  "object": "persona",
  "deleted": true,
  "archived_campaigns": 1,
  "deleted_sources": 6,
  "deleted_leads": null
}

Reorder personas

POST/v1/personas/reorderwrite scopeMCPreorder_personas

Sets the order of your personas, as the app lists them. Send every persona once.

Body parameters

  • persona_idsarray of stringsRequired
    Every persona ID of the account, in the new order.

Returns

A list of persona objects in the new order.

Errors

POST/v1/personas/reorder
curl -X POST https://gemlead.ai/api/v1/personas/reorder \
  -H "Authorization: Bearer $GEMLEAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "persona_ids": ["lvWBPnytpS", "pQ8nX2rTjk"]
  }'
Response200
{
  "object": "list",
  "data": [
    {
      "id": "lvWBPnytpS",
      "object": "persona",
      "name": "Tipsters",
      "description": "Sports and trading tipsters who sell picks or signals to a paying community.",
      "market": "b2c",
      "status": "active",
      "website": "https://example.com",
      "stats": {
        "leads_found": 18420,
        "leads_scored": 17960,
        "hot_leads": 2134,
        "avg_score": 41,
        "today": {
          "leads_found": 312,
          "hot_leads": 38,
          "dms_sent": 25,
          "replies": 4
        }
      },
      "sharing": {
        "home_account": {
          "id": "a9PzK2vRtM",
          "username": "acme"
        },
        "shared_with": [
          {
            "id": "Hq4TnW8cLm",
            "username": "acme_sales"
          }
        ]
      },
      "created_at": "2026-09-14T09:21:05.300Z",
      "updated_at": "2026-11-06T07:45:12.904Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

The persona settings object

Everything that decides which leads a persona finds and how the AI scores them, as the persona's page in the app edits it.

Attributes

  • objectstring
    Always persona_settings.
  • persona_idstring
    The persona's ID.
  • namestring
    The persona's name, one to three words like Ghostwriters.
  • websitestring or null
    Your product's website. The AI that scores leads reads it.
  • descriptionstring or null
    Who this buyer is, in plain words. The AI scores every lead from 0 to 100 against it, so it matters most. It can hold your own scoring rules.
  • marketstring
    b2b when businesses buy, b2c when people buy for themselves.
    b2bb2c
  • keywordsarray of strings
    Words in a profile or its posts that signal a fit.
  • competitorsarray of strings
    Products like yours. Someone who uses one is a fit.
  • avoidarray of strings
    Who to score low, like agencies or students.
  • min_followersinteger
    Profiles with fewer followers are not scored.
  • include_closed_inboxesboolean
    Whether people with closed DMs are scored too. A campaign reaches them with a comment.
  • auto_expandboolean
    Whether Gemlead adds sources by itself from the best leads when the others run dry.
  • auto_expand_directionstring or null
    Where auto expand goes next, in plain words, like more US founders.
  • daily_scoring_limitinteger
    The most leads scored a day for this persona, up to 2 credits a lead: 1 for the first pass, 1 more for the deep score when it passes.
  • statusstring
    Whether Gemlead is finding and scoring leads for it.
    activepaused
  • search_queriesarray of strings
  • competitor_accountsarray of strings
    Its competitor accounts, X usernames without the @.
  • updated_atstring
    When the persona last changed, ISO 8601.
Persona settings object
{
  "object": "persona_settings",
  "persona_id": "lvWBPnytpS",
  "name": "Tipsters",
  "website": "https://example.com",
  "description": "Sports and trading tipsters who sell picks or signals to a paying community.",
  "market": "b2c",
  "status": "active",
  "keywords": ["tipster", "betting tips", "trading signals"],
  "competitors": ["Patreon", "Whop"],
  "avoid": ["betting brands", "news accounts"],
  "min_followers": 500,
  "include_closed_inboxes": true,
  "auto_expand": false,
  "auto_expand_direction": null,
  "daily_scoring_limit": 3300,
  "search_queries": ["paid discord picks", "vip tips telegram"],
  "competitor_accounts": ["whop"],
  "updated_at": "2026-11-06T07:45:12.904Z"
}

Retrieve persona settings

GET/v1/personas/:persona_id/settingsread scopeMCPget_persona_settings

Returns every setting of a persona, with its keyword searches and competitor accounts.

Path parameters

  • persona_idstringRequired
    The persona's ID.

Returns

A persona settings object.

Errors

GET/v1/personas/:persona_id/settings
curl https://gemlead.ai/api/v1/personas/lvWBPnytpS/settings \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "object": "persona_settings",
  "persona_id": "lvWBPnytpS",
  "name": "Tipsters",
  "website": "https://example.com",
  "description": "Sports and trading tipsters who sell picks or signals to a paying community.",
  "market": "b2c",
  "status": "active",
  "keywords": ["tipster", "betting tips", "trading signals"],
  "competitors": ["Patreon", "Whop"],
  "avoid": ["betting brands", "news accounts"],
  "min_followers": 500,
  "include_closed_inboxes": true,
  "auto_expand": false,
  "auto_expand_direction": null,
  "daily_scoring_limit": 3300,
  "search_queries": ["paid discord picks", "vip tips telegram"],
  "competitor_accounts": ["whop"],
  "updated_at": "2026-11-06T07:45:12.904Z"
}

Update persona settings

PATCH/v1/personas/:persona_id/settingswrite scopeMCPupdate_persona

Changes the settings you send and keeps the others. A list you send replaces the whole list, so send keywords with the new word added to keep the others.

Path parameters

  • persona_idstringRequired
    The persona's ID.

Body parameters

  • namestring
    The persona's name, one to three words like Ghostwriters, up to 100 characters.
  • websitestring
    Your product's website, up to 500 characters. The AI that scores leads reads it.
  • descriptionstring
    Who this buyer is, in plain words. The AI scores every lead from 0 to 100 against it, so it matters most. It can hold your own scoring rules. Up to 12 000 characters.
  • marketstring
    b2b when businesses buy, b2c when people buy for themselves. Default b2b.
    b2bb2c
  • keywordsarray of strings
    Words in a profile or its posts that signal a fit. Up to 100, each up to 100 characters.
  • competitorsarray of strings
    Products like yours, someone who uses one is a fit. Up to 100.
  • avoidarray of strings
    Who to score low, like agencies or students. Up to 100.
  • min_followersinteger
    Profiles with fewer followers are not scored, 0 to 10 000 000. Default 100.
  • include_closed_inboxesboolean
    Score people with closed DMs too, a campaign reaches them with a comment. Default true.
  • auto_expandboolean
    Let Gemlead add sources by itself from the best leads when the others run dry. Default false.
  • auto_expand_directionstring
    Where auto expand goes next, in plain words like more US founders. Up to 500 characters.
  • daily_scoring_limitinteger
    The most leads scored a day for this persona, up to 2 credits a lead: 1 for the first pass, 1 more for the deep score when it passes. 100 to 20 000 for each X account that shares the persona.

Returns

The updated persona settings object.

Errors

PATCH/v1/personas/:persona_id/settings
curl -X PATCH \
  https://gemlead.ai/api/v1/personas/lvWBPnytpS/settings \
  -H "Authorization: Bearer $GEMLEAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "min_followers": 500,
    "avoid": ["betting brands", "news accounts"]
  }'
Response200
{
  "object": "persona_settings",
  "persona_id": "lvWBPnytpS",
  "name": "Tipsters",
  "website": "https://example.com",
  "description": "Sports and trading tipsters who sell picks or signals to a paying community.",
  "market": "b2c",
  "status": "active",
  "keywords": ["tipster", "betting tips", "trading signals"],
  "competitors": ["Patreon", "Whop"],
  "avoid": ["betting brands", "news accounts"],
  "min_followers": 500,
  "include_closed_inboxes": true,
  "auto_expand": false,
  "auto_expand_direction": null,
  "daily_scoring_limit": 3300,
  "search_queries": ["paid discord picks", "vip tips telegram"],
  "competitor_accounts": ["whop"],
  "updated_at": "2026-11-06T07:45:12.904Z"
}

The persona sharing object

The X accounts of one owner that work from the same persona. They share its sources, settings, leads and exclusion list, and each runs its own campaigns on it. A lead goes to one X account only, shown by its locked_to.

Attributes

  • objectstring
    Always persona_sharing.
  • persona_idstring
    The persona's ID.
  • home_accountobject or null
    The X account the persona was created on. Its sources and its leads live there.
  • shared_witharray of objects
    The other X accounts that share the persona. Empty when it is not shared.
  • available_accountsarray of objects
    The owner's other X accounts the persona can be shared with. Always empty for a team member, who cannot change the sharing.
  • daily_scoring_limitinteger
    The most leads scored a day for the persona, for the whole group. It can go up to 20 000 for each X account that shares the persona.
Persona sharing object
{
  "object": "persona_sharing",
  "persona_id": "lvWBPnytpS",
  "home_account": {
    "id": "a9PzK2vRtM",
    "username": "acme"
  },
  "shared_with": [
    {
      "id": "Hq4TnW8cLm",
      "username": "acme_sales"
    }
  ],
  "available_accounts": [
    {
      "id": "Rb7YsK3dQp",
      "username": "acme_founder"
    }
  ],
  "daily_scoring_limit": 3300
}

Retrieve persona sharing

GET/v1/personas/:persona_id/sharingread scopeMCPget_persona_sharing

Returns which X accounts of the owner share a persona, and the others it can be shared with.

Path parameters

  • persona_idstringRequired
    The persona's ID.

Returns

A persona sharing object.

Errors

GET/v1/personas/:persona_id/sharing
curl https://gemlead.ai/api/v1/personas/lvWBPnytpS/sharing \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "object": "persona_sharing",
  "persona_id": "lvWBPnytpS",
  "home_account": {
    "id": "a9PzK2vRtM",
    "username": "acme"
  },
  "shared_with": [
    {
      "id": "Hq4TnW8cLm",
      "username": "acme_sales"
    }
  ],
  "available_accounts": [
    {
      "id": "Rb7YsK3dQp",
      "username": "acme_founder"
    }
  ],
  "daily_scoring_limit": 3300
}

Update persona sharing

PUT/v1/personas/:persona_id/sharingwrite scopeMCPupdate_persona_sharing

Sets which other X accounts of the owner share a persona, from any X account of the group, as Shared with does in the app. Send the whole list, or an empty one to stop sharing. The daily_scoring_limit follows the size of the group, the same pace for each X account. Only the owner's keys can do it.

Path parameters

  • persona_idstringRequired
    The persona's ID.

Body parameters

  • account_idsarray of stringsRequired
    Every other X account of the owner that shares the persona, up to 20. Its home account always keeps it.

Returns

The updated persona sharing object.

Errors

PUT/v1/personas/:persona_id/sharing
curl -X PUT \
  https://gemlead.ai/api/v1/personas/lvWBPnytpS/sharing \
  -H "Authorization: Bearer $GEMLEAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "account_ids": ["Hq4TnW8cLm", "Rb7YsK3dQp"]
  }'
Response200
{
  "object": "persona_sharing",
  "persona_id": "lvWBPnytpS",
  "home_account": {
    "id": "a9PzK2vRtM",
    "username": "acme"
  },
  "shared_with": [
    {
      "id": "Hq4TnW8cLm",
      "username": "acme_sales"
    },
    {
      "id": "Rb7YsK3dQp",
      "username": "acme_founder"
    }
  ],
  "available_accounts": [],
  "daily_scoring_limit": 5000
}

The persona suggestion object

A persona the AI wrote for you from a name and your product, ready to create as is or to edit first.

Attributes

  • objectstring
    Always persona_suggestion.
  • statusstring
    pending while the AI writes, then ready or error. none before the first request.
    pendingreadyerrornone
  • persona_namestring or null
    The name it was asked for.
  • suggestionobject or null
    Once ready, the persona's description, keywords, competitors and avoid, the fields of Create a persona.
  • generated_atstring or null
    When it was written, ISO 8601.
  • errorstring or null
    What went wrong, when status is error.
Persona suggestion object
{
  "object": "persona_suggestion",
  "status": "ready",
  "persona_name": "Tipsters",
  "suggestion": {
    "description": "Sports and trading tipsters who sell picks or signals to a paying community on Discord or Telegram.",
    "keywords": ["tipster", "vip picks", "trading signals"],
    "competitors": ["Patreon", "Whop"],
    "avoid": ["betting brands", "sports media"]
  },
  "generated_at": "2026-11-06T07:45:12.904Z",
  "error": null
}

Suggest a persona

POST/v1/persona_suggestionswrite scopeMCPsuggest_persona

Asks the AI to write a persona from a name and what you sell, or to rewrite a description. It takes a few seconds, so the answer is pending. Read the result with Retrieve the persona suggestion.

Body parameters

  • persona_namestringRequired
    The persona to write, one to three words like Ghostwriters.
  • websitestring
    Your product's website. Default the one on your X profile.
  • briefstring
    What you sell and to whom, in your words, up to 1 000 characters.
  • current_descriptionstring
    A description to rewrite, with instruction.
  • instructionstring
    How to change current_description, like shorter or only US agencies. Up to 2 000 characters.

Returns

A persona suggestion object, its status at pending.

Errors

POST/v1/persona_suggestions
curl -X POST https://gemlead.ai/api/v1/persona_suggestions \
  -H "Authorization: Bearer $GEMLEAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "persona_name": "Tipsters",
    "brief": "A checkout for paid Discord and Telegram groups."
  }'
Response202
{
  "object": "persona_suggestion",
  "status": "pending",
  "persona_name": "Tipsters",
  "suggestion": null,
  "generated_at": null,
  "error": null
}

Retrieve the persona suggestion

GET/v1/persona_suggestions/latestread scopeMCPget_persona_suggestion

Returns the account's last persona suggestion. Ask again every few seconds while it is pending.

Returns

A persona suggestion object.

GET/v1/persona_suggestions/latest
curl https://gemlead.ai/api/v1/persona_suggestions/latest \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "object": "persona_suggestion",
  "status": "ready",
  "persona_name": "Tipsters",
  "suggestion": {
    "description": "Sports and trading tipsters who sell picks or signals to a paying community on Discord or Telegram.",
    "keywords": ["tipster", "vip picks", "trading signals"],
    "competitors": ["Patreon", "Whop"],
    "avoid": ["betting brands", "sports media"]
  },
  "generated_at": "2026-11-06T07:45:12.904Z",
  "error": null
}