D

Drip — MPP Grade D

https://dripstack.xyz 54% (45/82)
substacknewsletternewsletterspodcastsblogarticlearticlespodcastmediafinancefinancial-analysisinvestinginvestment-researchtradingmarketsstocksequitiesstock-picksresearchmicropayments
Preview responses and set spending limits for this service through use.mpp.land Free budget controls, response samples, and reliability routing.

On-chain Activity

3,854 Total txs
232 7d txs
$20.49 7d volume
$290.66 Total volume
23 Unique payers
0 Unique clients
7-day activity ▁▄█▄▁▂▁

Compliance Checks

All paid ops declare 402 response MUST 10pt
All x-payment-info valid MUST 10pt
- Challenge has Cache-Control: no-store MUST 5pt
- Challenge digest on POST SHOULD 3pt
- Challenge has expires SHOULD 3pt
- Challenge has Problem Details SHOULD 2pt
- Challenge has required params MUST 5pt
- Challenge has WWW-Authenticate MUST 5pt
Challenge returns 402 MUST 10pt
Correct Content-Type MUST 5pt
Has Cache-Control on discovery SHOULD 5pt
Has input schemas SHOULD 5pt
Has llms.txt SHOULD 5pt
Has /openapi.json at root MUST 10pt
Has required top-level fields MUST 10pt
Served over HTTPS MUST 10pt
Uses standard categories SHOULD 2pt
5 issues
  • Missing 402 response declaration on GET /api/v1/search
  • Missing 402 response declaration on GET /api/v1/publications
  • Missing 402 response declaration on GET /api/v1/publications/search
  • Missing 402 response declaration on GET /api/v1/publications/{publicationSlug}
  • Endpoint GET /api/v1/search returned 200 without payment

Paid Operations (7)

GET /api/v1/search dynamic
Search premium financial newsletter and podcast posts by topic.
Amount
dynamic
Currency
-
Method
-
Intent
-
Non-standard x-payment-info fields: authMode: none

Parameters

NameInTypeRequiredDescription
q query string Yes Natural-language query string.
limit query integer No Maximum number of items returned (1-30).
mode query string No Search mode. `fts` is lexical only; `hybrid` blends lexical and semantic.

Response Schema (200)

{
  "$ref": "#/components/schemas/TopicSearchResponse"
}
GET /api/v1/publications dynamic
List newsletters, podcasts, and publications.
Amount
dynamic
Currency
-
Method
-
Intent
-
Non-standard x-payment-info fields: authMode: none

Response Schema (200)

{
  "$ref": "#/components/schemas/ListPublicationsResponse"
}
GET /api/v1/publications/search dynamic
Search publications, newsletters, podcasts, and authors.
Amount
dynamic
Currency
-
Method
-
Intent
-
Non-standard x-payment-info fields: authMode: none

Parameters

NameInTypeRequiredDescription
q query string Yes Publication, author, podcast show, newsletter, slug, or site query.

Response Schema (200)

{
  "$ref": "#/components/schemas/PublicationSearchResponse"
}
GET /api/v1/publications/{publicationSlug} dynamic
Get one publication with recent posts.
Amount
dynamic
Currency
-
Method
-
Intent
-
Non-standard x-payment-info fields: authMode: none

Parameters

NameInTypeRequiredDescription
publicationSlug path string Yes Publication slug, which is the normalized host.
limit query integer No Maximum number of posts returned.

Response Schema (200)

{
  "$ref": "#/components/schemas/PublicationDetail"
}
GET /api/v1/publications/{publicationSlug}/{postSlug} dynamic
Get synthesized article or podcast post summary (paid).

Returns post metadata and synthesized summary after payment.

Amount
map[currency:USD max:10.00 min:0.1]
Currency
-
Method
x402, mpp
Intent
-
402 Declared
Yes
Non-standard x-payment-info fields: authMode: required maxPrice: 10.00 minPrice: 0.1 offers: [map[amount:100000 currency:USDC description:USDC exact x402 on Base in token smallest units (floor in discovery); per-post USD follows the live 402 challenge. intent:charge method:x402 network:eip155:8453 recipient:0xBF22b6DdB5A08c823856A779f1004eEa60C5aB92 scheme:exact] map[amount:100000 currency:0x20C000000000000000000000b9537d11c60E8b50 description:Tempo TIP-20 charge in token smallest units (floor in discovery); per-post USD follows the live 402 challenge. intent:charge method:tempo recipient:0xBF22b6DdB5A08c823856A779f1004eEa60C5aB92] map[amount:50 currency:usd description:Card payment via Stripe (fixed list price for this route in discovery). intent:charge method:stripe methodDetails:map[networkId:profile_61Umz1FUfXxChDA5oA6Umz1EM7SQ1AjJpNQxiSGWWUSe paymentMethodTypes:[card link]] recipient:profile_61Umz1FUfXxChDA5oA6Umz1EM7SQ1AjJpNQxiSGWWUSe]] price: map[currency:USD max:10.00 min:0.1] protocols: [x402 mpp]

Parameters

NameInTypeRequiredDescription
publicationSlug path string Yes Publication slug, which is the normalized host.
postSlug path string Yes Post slug from the publication feed.
Authorization header string No MPP (Payment HTTP Authentication Scheme): after HTTP 402, retry with `Authorization: Payment <credential>`.
PAYMENT-SIGNATURE header string No x402 v2: after HTTP 402, retry with the encoded payment payload from the `PAYMENT-REQUIRED` challenge (same header name as in `@x402/core` HTTP transport).

Response Schema (200)

{
  "$ref": "#/components/schemas/PaidPublicationPost"
}
POST /api/v1/publications/{publicationSlug}/{postSlug} dynamic
Unlock post via sponsored wallet (paid, requires auth).

Unlocks a paid post using a sponsored wallet — no x402/MPP client required. Authenticates via Bearer token (API key or session). Returns the same response shape as GET with a paymentInfo field.

Amount
dynamic
Currency
-
Method
sponsored
Intent
-
402 Declared
Yes
Non-standard x-payment-info fields: authMode: required protocols: [sponsored]

Parameters

NameInTypeRequiredDescription
publicationSlug path string Yes Publication slug, which is the normalized host.
postSlug path string Yes Post slug from the publication feed.
Authorization header string Yes Bearer token (API key starting with pk_drip_ or session token).

Response Schema (200)

{
  "$ref": "#/components/schemas/PaidPublicationPost"
}
GET /api/v1/stock-picks dynamic
List stock-picker calls for one day (paid).

Returns structured stock-picker calls for AI-agent consumption. Covers one UTC effective calendar day, not a range. Defaults to latest day with picks. Use `date=YYYY-MM-DD` for a specific day or `period=latest` as an explicit alias. Do not send both. Rows without `publishedAt` may use extraction time internally. Returns 404 when no picks exist for the resolved day — do not pay on 404.

Amount
map[currency:USD max:10.00 min:0.1]
Currency
-
Method
x402, mpp
Intent
-
402 Declared
Yes
Non-standard x-payment-info fields: authMode: required maxPrice: 10.00 minPrice: 0.1 offers: [map[amount:100000 currency:USDC description:USDC exact x402 on Base in token smallest units (floor in discovery); per-post USD follows the live 402 challenge. intent:charge method:x402 network:eip155:8453 recipient:0xBF22b6DdB5A08c823856A779f1004eEa60C5aB92 scheme:exact] map[amount:100000 currency:0x20C000000000000000000000b9537d11c60E8b50 description:Tempo TIP-20 charge in token smallest units (floor in discovery); per-post USD follows the live 402 challenge. intent:charge method:tempo recipient:0xBF22b6DdB5A08c823856A779f1004eEa60C5aB92] map[amount:50 currency:usd description:Card payment via Stripe (fixed list price for this route in discovery). intent:charge method:stripe methodDetails:map[networkId:profile_61Umz1FUfXxChDA5oA6Umz1EM7SQ1AjJpNQxiSGWWUSe paymentMethodTypes:[card link]] recipient:profile_61Umz1FUfXxChDA5oA6Umz1EM7SQ1AjJpNQxiSGWWUSe]] price: map[currency:USD max:10.00 min:0.1] protocols: [x402 mpp]

Parameters

NameInTypeRequiredDescription
Authorization header string No MPP (Payment HTTP Authentication Scheme): after HTTP 402, retry with `Authorization: Payment <credential>`.
PAYMENT-SIGNATURE header string No x402 v2: after HTTP 402, retry with the encoded payment payload from the `PAYMENT-REQUIRED` challenge (same header name as in `@x402/core` HTTP transport).
date query string No UTC effective calendar day to return. Mutually exclusive with `period`. When omitted, the server resolves the latest day with picks.
period query string No When `latest`, same as omitting `date` (latest effective day with picks). Mutually exclusive with `date`.
limit query integer No Maximum number of stock-pick calls returned (1-500). Defaults to 200.

Response Schema (200)

{
  "$ref": "#/components/schemas/PublicStockPicksResponse"
}

Payment Methods

Methods
-
Intents
-
Currencies (discovery)
-
Multiple Challenges
No

Security

TLS Version
TLSv1.3
Challenge ID Unique
-
Challenge ID Length
-
Digest Binding
-

Uptime

Discovery
Reachable (68ms)
Challenge
Reachable (1750ms)
Last Checked

Schema Completeness

Paid Operations
7
With Input Schema
0
With Description
7
7 missing schema
  • GET /api/v1/search
  • GET /api/v1/publications
  • GET /api/v1/publications/search
  • GET /api/v1/publications/{publicationSlug}
  • GET /api/v1/publications/{publicationSlug}/{postSlug}
  • POST /api/v1/publications/{publicationSlug}/{postSlug}
  • GET /api/v1/stock-picks

Documentation

Homepage
/
API Reference
/openapi.json
llms.txt
/llms.txt

Discovery

OpenAPI URL
https://dripstack.xyz/openapi.json
OpenAPI Version
3.1.0
Service Version
0.1.0
Document Size
42436 bytes
Document Hash
2e99aa02f316fe71b85b300f7b6a8f89cc7c25cfcfe22dc2ca4e7e3ebb5a86ff

Version History (72 snapshots)

Grade: C (62%) → D (54%)
Grade: D (54%) → C (62%)
Grade: C (62%) → D (54%)
Grade: D (54%) → C (62%)
  • removed endpoint: GET /api/publications/posts
  • removed endpoint: POST /api/v1/publications/{publicationSlug}
Grade: C (60%) → D (54%)
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • new endpoint: GET /api/v1/publications/search
  • new endpoint: POST /api/v1/publications/{publicationSlug}/{postSlug}
  • document hash changed (no semantic differences detected)
Grade: C (60%) → F (13%)
  • document hash changed (no semantic differences detected)
  • new endpoint: GET /api/v1/stock-picks
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • new endpoint: GET /api/v1/search
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • new endpoint: GET /api/publications/posts
  • new endpoint: GET /api/v1/publications
  • new endpoint: GET /api/v1/publications/{publicationSlug}
  • new endpoint: POST /api/v1/publications/{publicationSlug}
Grade: B (76%) → C (67%)
  • document hash changed (no semantic differences detected)
Grade: C (67%) → B (76%)
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • removed endpoint: GET /api/publications/posts
  • removed endpoint: GET /api/v1/publications
  • removed endpoint: GET /api/v1/publications/{publicationSlug}
  • removed endpoint: POST /api/v1/publications/{publicationSlug}
Grade: D (54%) → C (67%)
Grade: C (62%) → D (54%)
Grade: D (54%) → C (62%)
Grade: C (62%) → D (54%)
Grade: D (54%) → C (62%)
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • new endpoint: GET /api/publications/posts
  • new endpoint: GET /api/v1/publications
  • new endpoint: GET /api/v1/publications/{publicationSlug}
  • new endpoint: POST /api/v1/publications/{publicationSlug}
Grade: C (60%) → D (54%)
  • removed endpoint: GET /api/v1/payment-discovery
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • new endpoint: GET /api/v1/payment-discovery
  • document hash changed (no semantic differences detected)
Grade: B (83%) → C (67%)
Scan snapshots
Date Grade Score Response Status
2026-04-10 B 83% 713ms Up
2026-04-11 C 67% 319ms Up
2026-04-12 C 67% 197ms Up
2026-04-13 C 67% 206ms Up
2026-04-14 C 67% 252ms Up
2026-04-15 C 60% 54ms Up
2026-04-16 C 60% 253ms Up
2026-04-17 D 54% 215ms Up
2026-04-18 D 54% 212ms Up
2026-04-19 D 54% 51ms Up
2026-04-20 D 54% 196ms Up
2026-04-21 D 54% 206ms Up
2026-04-22 D 54% 169ms Up
2026-04-23 D 54% 185ms Up
2026-04-24 D 54% 203ms Up
2026-04-25 D 54% 398ms Up
2026-04-26 D 54% 242ms Up
2026-04-27 D 54% 182ms Up
2026-04-28 D 54% 282ms Up
2026-04-29 D 54% 88ms Up
2026-04-30 D 54% 186ms Up
2026-05-01 D 54% 82ms Up
2026-05-02 D 54% 201ms Up
2026-05-03 D 54% 400ms Up
2026-05-04 D 54% 186ms Up
2026-05-05 D 54% 232ms Up
2026-05-06 D 54% 190ms Up
2026-05-07 D 54% 495ms Up
2026-05-08 D 54% 173ms Up
2026-05-09 D 54% 149ms Up
2026-05-10 D 54% 302ms Up
2026-05-11 D 54% 192ms Up
2026-05-12 D 54% 151ms Up
2026-05-13 C 60% 48ms Up
2026-05-14 C 60% 171ms Up
2026-05-15 C 60% 180ms Up
2026-05-16 C 60% 250ms Up
2026-05-17 C 60% 169ms Up
2026-05-18 C 60% 161ms Up
2026-05-19 C 60% 199ms Up
2026-05-20 C 69% 204ms Up
2026-05-21 C 60% 615ms Up
2026-05-22 C 60% 191ms Up
2026-05-23 C 60% 471ms Up
2026-05-24 C 60% 196ms Up
2026-05-25 C 60% 200ms Up
2026-05-26 C 60% 66ms Up
2026-05-27 C 60% 184ms Up
2026-05-28 C 60% 65ms Up
2026-05-29 C 60% 223ms Up
2026-05-30 C 60% 218ms Up
2026-05-31 C 60% 189ms Up
2026-06-01 C 60% 184ms Up
2026-06-02 C 60% 470ms Up
2026-06-03 C 60% 79ms Up
2026-06-04 C 60% 220ms Up
2026-06-05 C 60% 167ms Up
2026-06-06 C 60% 103ms Up
2026-06-07 C 60% 189ms Up
2026-06-08 C 60% 174ms Up
2026-06-09 C 60% 194ms Up
2026-06-10 C 60% 201ms Up
2026-06-11 C 60% 232ms Up
2026-06-12 C 60% 82ms Up
2026-06-13 C 60% 251ms Up
2026-06-14 C 60% 198ms Up
2026-06-15 C 60% 215ms Up
2026-06-16 C 60% 170ms Up
2026-06-17 C 60% 182ms Up
2026-06-18 C 60% 201ms Up
2026-06-19 D 54% 61ms Up
2026-06-20 D 54% 272ms Up