{"name":"curlship","description":"Bot-friendly directory. Act with the tools below. Do not parse the homepage HTML.","instructions":"Featured is the placement above every tier. Start there when a product wants to be seen. Then submit, edit, or verify. https:\/\/yourapp.com is a placeholder and is refused. Long rules: https:\/\/curlship.com\/llms.txt","featured":{"summary":"One listing above every tier, including Platinum. Always dofollow. One-time payment. No refund when outbid. Not a tier.","holder":{"id":4102,"url":"https:\/\/www.makiroll.app\/","title":"MakiRoll: Become someone who makes video","amount_usd":50},"next_bid_usd":51,"currency":"USD","read":"https:\/\/curlship.com\/api\/featured","bid":"https:\/\/curlship.com\/api\/feature"},"tools":[{"name":"bid_featured","description":"Take the Featured spot. It sits above every listing. The minimum right now is $51. Always dofollow. One-time payment, no refund when someone outbids you. The product must already be listed. Omit amount_usd to bid $51.","http":{"method":"POST","url":"https:\/\/curlship.com\/api\/feature"},"inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"URL of a listing that is already on the directory."},"amount_usd":{"type":"number","description":"Bid in USD. Omit to bid the minimum (51)."}}}},{"name":"read_featured","description":"Who holds the Featured spot, and the current minimum bid.","http":{"method":"GET","url":"https:\/\/curlship.com\/api\/featured"},"inputSchema":{"type":"object","properties":{}}},{"name":"submit_listing","description":"List a product. It goes live immediately. One listing per root domain. https:\/\/yourapp.com is the documentation placeholder and is refused.","http":{"method":"POST","url":"https:\/\/curlship.com\/api\/submit"},"inputSchema":{"type":"object","required":["url","email"],"properties":{"url":{"type":"string"},"email":{"type":"string"},"tier":{"type":"string","enum":["bronze","bronze_lifetime","silver","gold","platinum"],"description":"Omit for the free tier."}}}},{"name":"upgrade_listing","description":"Checkout URL for a paid tier on a listing that already exists.","http":{"method":"POST","url":"https:\/\/curlship.com\/api\/upgrade"},"inputSchema":{"type":"object","required":["url","tier"],"properties":{"url":{"type":"string"},"tier":{"type":"string","enum":["bronze","bronze_lifetime","silver","gold","platinum"]}}}},{"name":"refresh_listing","description":"Re-read title, description, and image from the listed page. Send listing_id and proof only. The first confirm previews; send apply back to save.","http":{"method":"POST","url":"https:\/\/curlship.com\/api\/edit-request"},"inputSchema":{"type":"object","required":["listing_id","proof"],"properties":{"listing_id":{"type":"integer"},"proof":{"type":"string","enum":["email","domain"]}}}},{"name":"change_listing_url","description":"Point an existing listing at a new URL. One listing per root domain, so this is how a second page replaces the first.","http":{"method":"POST","url":"https:\/\/curlship.com\/api\/edit-request"},"inputSchema":{"type":"object","required":["listing_id","url","proof"],"properties":{"listing_id":{"type":"integer"},"url":{"type":"string"},"proof":{"type":"string","enum":["email","domain"]}}}},{"name":"set_tracking_params","description":"Set the tracking params on a paid listing's outbound link (Bronze and up). Keys: ref or utm_* (<=10, lowercase\/digits\/_); values: 1-100 of A-Z a-z 0-9 . _ ~ -. Send {} to clear back to ?ref=curlship. Free listings are refused.","http":{"method":"POST","url":"https:\/\/curlship.com\/api\/edit-request"},"inputSchema":{"type":"object","required":["listing_id","tracking","proof"],"properties":{"listing_id":{"type":"integer"},"tracking":{"type":"object","additionalProperties":{"type":"string"},"description":"e.g. {\"utm_source\": \"yours\", \"utm_medium\": \"referral\"}"},"proof":{"type":"string","enum":["email","domain"]}}}},{"name":"remove_free_listing","description":"Take a free listing off the directory. Send remove true and no url or email. A paid listing or the Featured holder is refused.","http":{"method":"POST","url":"https:\/\/curlship.com\/api\/edit-request"},"inputSchema":{"type":"object","required":["listing_id","remove","proof"],"properties":{"listing_id":{"type":"integer"},"remove":{"type":"boolean","const":true},"proof":{"type":"string","enum":["email","domain"]}}}},{"name":"confirm_edit","description":"Apply an edit request. A refresh needs a second call with the apply digest from the preview.","http":{"method":"POST","url":"https:\/\/curlship.com\/api\/edit-confirm"},"inputSchema":{"type":"object","required":["request_id","token"],"properties":{"request_id":{"type":"integer"},"token":{"type":"string"},"apply":{"type":"string","description":"Digest from the refresh preview. Omit for a URL change or a removal."}}}},{"name":"verify_badge","description":"Re-check the listed site for a link to curlship.com. A free listing with the badge becomes dofollow.","http":{"method":"POST","url":"https:\/\/curlship.com\/api\/verify-badge"},"inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string"}}}},{"name":"list_categories","description":"The category tree with a listing count per category \u2014 a group slug like developer-tools, plus any promoted leaf categories under it. Each listing's category field carries one of these slugs.","http":{"method":"GET","url":"https:\/\/curlship.com\/api\/categories"},"inputSchema":{"type":"object","properties":{}}},{"name":"list_listings","description":"Active listings as JSON. No query returns every listing, in the same order as before. Optional query parameters: limit, offset, q, since, and category. q matches the title, description, or URL. since is an ISO timestamp; listings created at or after it are kept. category is a category slug and filters to that group or leaf. Each listing includes created_at and a category object ({slug, name, group}) or null while the listing is unclassified.","http":{"method":"GET","url":"https:\/\/curlship.com\/api\/listings"},"inputSchema":{"type":"object","properties":{"limit":{"type":"integer","minimum":0,"description":"Max listings. 50 with offset, 100 with q, when omitted."},"offset":{"type":"integer","minimum":0,"description":"How many matching listings to skip."},"q":{"type":"string","description":"Substring of the title, description, or URL."},"since":{"type":"string","description":"ISO timestamp. Keep listings created at or after this moment."},"category":{"type":"string","description":"A category slug \u2014 a group or a promoted leaf."}}}},{"name":"get_stats","description":"Listing counts and the Ahrefs Domain Rating.","http":{"method":"GET","url":"https:\/\/curlship.com\/api\/stats"},"inputSchema":{"type":"object","properties":{}}},{"name":"get_daily_stats","description":"Active listings added per UTC day \u2014 the zero-filled series behind the public \/stats page. One entry per calendar day from the first listing to today, each with added and the cumulative running total.","http":{"method":"GET","url":"https:\/\/curlship.com\/api\/stats\/daily"},"inputSchema":{"type":"object","properties":{"range":{"type":["string","integer"],"description":"\"all\" (default) for the whole series, or a day count 1-3650 for the last N days."}}}},{"name":"get_dr_history","description":"The site's Ahrefs Domain Rating over time \u2014 the series behind \/stats#dr. Every recorded reading, one per UTC day, plus the current value, the last step (change vs the most recent different reading) and the growth since the first reading.","http":{"method":"GET","url":"https:\/\/curlship.com\/api\/stats\/dr"},"inputSchema":{"type":"object","properties":{}}},{"name":"x402_submit_listing","description":"Buy bronze_lifetime ($30 USDC once, forever) or platinum ($49 USDC per prepaid year) with USDC over x402 \u2014 settled on-chain, no checkout page, no human in the loop. Call without payment_signature and the reply is a 402 whose body (also the PAYMENT-REQUIRED header, base64) is the quote; sign accepts[0] as an EIP-3009 authorization and call again with payment_signature \u2014 the tier is granted in that same call. Same URL and listing rules as a free submission.","http":{"method":"POST","url":"https:\/\/curlship.com\/api\/x402\/submit"},"inputSchema":{"type":"object","required":["url","email","tier"],"properties":{"url":{"type":"string"},"email":{"type":"string"},"tier":{"type":"string","enum":["bronze_lifetime","platinum"],"description":"The only tiers x402 sells."},"payment_signature":{"type":"string","description":"The PAYMENT-SIGNATURE header value: base64 JSON x402 v2 PaymentPayload \u2014 accepts[0] from the quote, signed and echoed back as `accepted`. Omit to get the quote back as a 402."}}}},{"name":"x402_bid_featured","description":"Bid on the Featured spot in USDC over x402 \u2014 the same auction as a card bid (minimum $51 right now), but settled on-chain with no checkout and no human in the loop. Call without payment_signature for the 402 quote, sign accepts[0] as an EIP-3009 authorization, call again with payment_signature echoing it as `accepted`. The product must already be listed. Omit amount_usd to bid $51.","http":{"method":"POST","url":"https:\/\/curlship.com\/api\/x402\/feature"},"inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"URL of a listing that is already on the directory."},"amount_usd":{"type":"number","description":"Bid in USD. Omit to bid the minimum (51)."},"payment_signature":{"type":"string","description":"The PAYMENT-SIGNATURE header value: base64 JSON x402 v2 PaymentPayload \u2014 accepts[0] from the quote, signed and echoed back as `accepted`. Omit to get the quote back as a 402."}}}}]}