Addshuffle APIaddshuffle.com ↗
Access Shuffle's SMS entry point, FAQ content, and official page text via 3 endpoints. Retrieve phone numbers, iMessage links, and keyword-matched quotes.
What is the Addshuffle API?
This API exposes three endpoints that cover the public-facing content of Shuffle (addshuffle.com): the live Messages/SMS entry point with its current phone number and sms: URL, the complete FAQ as structured question-answer pairs, and a keyword search across Shuffle's home, FAQ, and How-it-works pages. The get_messages_entry_point endpoint returns seven fields including the E.164 phone number, both sms: URLs, and a capacity flag that reflects what the page currently shows.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/2eea24d2-8bf7-4aaa-b7e7-a5c81a72b99e/get_messages_entry_point' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace addshuffle-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Shuffle public-info SDK — bounded, re-runnable."""
from parse_apis.addshuffle_com_api import Shuffle, OfficialPage, InputFormatInvalid
client = Shuffle()
# Fetch the current Messages entry point (phone number rotates each load).
entry = client.entry_points.get()
print(f"Button: {entry.button_label}")
print(f"Phone: {entry.phone_number} (rotates: {entry.number_rotates})")
print(f"SMS link: {entry.button_click_href}")
# Browse the FAQ — cap to 5 items.
for item in client.faq_items.list(limit=5):
print(f"Q: {item.question}")
print(f"A: {item.answer[:120]}")
# Search official pages for keyword quotes, scoped to the FAQ page.
for quote in client.quotes.search(keywords="iMessage,Messages", page=OfficialPage.FAQ, limit=5):
print(f"[{quote.page}] {quote.quote[:100]} (matched: {quote.matched_keywords})")
# Search across all pages and drill into the first hit.
try:
hit = client.quotes.search(keywords="group chat", limit=1).first()
except InputFormatInvalid as e:
print(f"Invalid search input: {e.message}")
hit = None
if hit is not None:
print(f"First match on '{hit.page}': {hit.quote[:120]}")
print(f"Source URL: {hit.url}")
print("exercised: entry_points.get / faq_items.list / quotes.search")
Returns the Messages (iMessage/SMS) entry point currently shown on the Shuffle home page: the label of the 'Or text Shuffle in Messages' button, the phone number it targets, the sms: URL the button opens when tapped on a phone (the site composes it from the current number and its default draft text), and the server-rendered sms: link for the same number. The site rotates the phone number between page loads and its own help pages say to use the live link rather than a saved number, so number_rotates is always true and callers should re-fetch rather than cache. One request; always returns a single object.
No input parameters required.
{
"type": "object",
"fields": {
"entry_slug": "per-page-load entry slug the site attaches to the number assignment",
"button_label": "visible text of the Messages button on the home page",
"phone_number": "E.164 phone number the entry point targets, as published on this page load",
"is_at_capacity": "boolean; true when the site reports the entry point is at capacity",
"number_rotates": "boolean; always true, the number changes between page loads",
"server_link_href": "sms: URL in the server-rendered Messages link for the same number (different default draft text)",
"button_click_href": "sms: URL the button navigates to when tapped (number plus the site's default draft message)"
},
"sample": {
"data": {
"entry_slug": "dawn-comm-894731",
"button_label": "Or text Shuffle in Messages",
"phone_number": "+1 (555) 012-3456",
"is_at_capacity": false,
"number_rotates": true,
"server_link_href": "sms:+1 (555) 012-3456?body=hey%2C%20im%20new%20here",
"button_click_href": "sms:+1 (555) 012-3456?body=Hey%20Shuffle!"
},
"status": "success"
}
}About the Addshuffle API
Entry Point Data
The get_messages_entry_point endpoint returns the current state of the 'Or text Shuffle in Messages' button on the Shuffle home page. Because the phone number rotates between page loads, each call reflects the number assigned at that moment. The response includes phone_number (E.164 format), button_click_href (the sms: URL the button opens, with Shuffle's default draft text pre-filled), server_link_href (an sms: URL from the server-rendered link, which uses different draft text), is_at_capacity (a boolean reflecting whether the entry point is currently reported as full), and entry_slug (a per-load identifier the site attaches to the number).
FAQ Content
The get_faq endpoint fetches the entire Shuffle FAQ page and returns every question-answer pair as a flat array in page order. The items array contains each entry's question and answer text; total gives the integer count. There is no pagination — one request returns all entries. If the FAQ page returns no parseable content, the endpoint reports an extraction failure rather than an empty array.
Keyword Search Across Official Pages
The search_official_text endpoint accepts a required keywords parameter (comma-separated terms, not an array) and searches the visible text of Shuffle's home, FAQ, and How-it-works pages for matching sentences. Each result in the quotes array includes the verbatim sentence, the page key, the page_url, and the matched_keywords list. Matching is case-insensitive substring per sentence. The optional page parameter restricts the search to one of the three pages; omitting it searches all three. The response also returns pages_searched and keywords so callers can verify what was actually queried.
The Addshuffle API is a managed, monitored endpoint for addshuffle.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when addshuffle.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official addshuffle.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track rotation of Shuffle's public SMS entry point phone number over time using
phone_numberfromget_messages_entry_point - Monitor whether the Shuffle Messages entry point is at capacity using the
is_at_capacityboolean - Build a structured reference of Shuffle's FAQ content by consuming the
itemsarray fromget_faq - Extract specific policy or feature language from Shuffle's official pages using
search_official_textwith targeted keywords - Identify which official Shuffle page mentions a given term using the
pageandpage_urlfields in search results - Detect changes to the default iMessage draft text by comparing
button_click_hrefvalues across calls
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Shuffle have an official developer API?+
What does `get_messages_entry_point` return, and why might the phone number differ between calls?+
is_at_capacity and number_rotates flags as they appear on that page load. The number_rotates field is always true, reflecting that Shuffle assigns different numbers across page loads — so sequential calls to this endpoint may return different phone_number values.Does `search_official_text` support searching pages beyond home, FAQ, and How-it-works?+
pages_searched field will always contain a subset of those three pages. You can fork this API on Parse and revise it to add additional Shuffle pages as sources.Does the API return user-generated data such as group chat histories or individual Shuffle profiles?+
How should the `keywords` parameter be formatted for `search_official_text`?+
group chat,SMS,iMessage. Do not pass a JSON array. The endpoint splits on commas internally and returns the parsed terms in the keywords field of the response so you can confirm how they were interpreted.