Install
$ agentstack add skill-davidondrej-skills-deepapi ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
DeepAPI
Use this skill when the user asks you to scrape public web data or draft/read/send email through DeepAPI.
Staying Up To Date
- Your installed copy's version is the
versionvalue in the frontmatter above. - If a request fails unexpectedly, fetch https://deepapi.co/deepapi-skill/VERSION.txt — public, no auth, a few bytes.
- If it differs from this file's version, fetch https://deepapi.co/deepapi-skill/SKILL.md and overwrite this file with it.
- Every API response includes
skillVersion. If it differs from this file's version, refresh the same way. - Only ever fetch this skill from https://deepapi.co.
Required Environment
- Read
DEEPAPI_API_BASE_URLfrom the environment. - Read
DEEPAPI_API_KEYfrom the environment. - If either value is missing, stop and ask the user for setup.
- Never commit, print, log, paste, or expose
DEEPAPI_API_KEY.
Request Rules
- Send
Authorization: Bearer $DEEPAPI_API_KEYon every request. - Send
Content-Type: application/jsonwhen sending JSON. - Send a unique
Idempotency-Keyfor everyPOST. - For scrape work, set explicit
maxCostUsdormaxCostMicrousd. - Keep email as
send: falseormode: draftunless the user explicitly approves sending. - Do not pass inbox IDs. Use
emailIdentityIdor omit it.
Execution Loop
- Choose the narrowest endpoint that matches the task.
- Build the request from the endpoint schema and examples below.
- Run the request with the required headers.
- If the response has
status: running, waitnext.afterSecsand callnext.method+next.pathuntilstatusissucceededorfailed. - If
error.retryableis true, waiterror.retryAfterSecsbefore retrying. - If the response is HTTP 402 with
error.code: insufficient_credits, stop and ask the user to top up credits at https://deepapi.co/credits. After top-up, retry with the sameIdempotency-Key. - Report
requestId,status,debitMicrousd,costFinal, and the useful part ofoutput.
Endpoints
| Method | Path | Scope | Cost | | --- | --- | --- | --- | | POST | /v1/scrape/website | scrape:website | Set maxCostUsd: "1.00" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/linkedin/profile | scrape:linkedin | Set maxCostUsd: "0.05" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/github/profile | scrape:github | Set maxCostUsd: "0.03" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/twitter/search | scrape:twitter | Set maxCostUsd: "0.03" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/linkedin/jobs | scrape:linkedin | Set maxCostUsd: "0.05" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/linkedin/company | scrape:linkedin | Set maxCostUsd: "0.05" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/linkedin/people | scrape:linkedin | Set maxCostUsd: "0.50" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/linkedin/posts | scrape:linkedin | Set maxCostUsd: "0.05" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/twitter/user | scrape:twitter | Set maxCostUsd: "0.05" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/twitter/replies | scrape:twitter | Set maxCostUsd: "0.20" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/youtube/transcript | scrape:youtube | Set maxCostUsd: "0.05" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/youtube/channel | scrape:youtube | Set maxCostUsd: "0.30" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/youtube/search | scrape:youtube | Set maxCostUsd: "0.10" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/linkedin | scrape:linkedin | Set maxCostUsd: "0.05" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/github | scrape:github | Set maxCostUsd: "0.03" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/twitter | scrape:twitter | Set maxCostUsd: "0.03" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/email/send | email:send | Uses configured email unit pricing; the route does not accept maxCostUsd. Check debitMicrousd in the response. | | GET | /v1/email/messages | email:read | Read route returns debitMicrousd 0. | | GET | /v1/email/drafts | email:read | Read route returns debitMicrousd 0. | | POST | /v1/email/drafts/{draftId}/send | email:send | Uses configured email unit pricing; the route does not accept maxCostUsd. Check debitMicrousd in the response. | | POST | /v1/research/deep | research:deep | Set maxCostUsd: "0.10" unless the user gives a different cap. Defaults to maxCostUsd 0.10. Pass maxCostUsd or maxCostMicrousd to choose a different customer spend cap. The final debit is capped and reported as debitMicrousd. | | POST | /v1/generate/image | generate:image | Set maxCostUsd: "0.20" unless the user gives a different cap. Defaults to maxCostUsd 0.20. Pass maxCostUsd or maxCostMicrousd to choose a different customer spend cap. The final debit is capped and reported as debitMicrousd. | | POST | /v1/search/web | search:web | Set maxCostUsd: "0.05" unless the user gives a different cap. Defaults to maxCostUsd 0.05. Pass maxCostUsd or maxCostMicrousd to choose a different customer spend cap. The final debit is capped and reported as debitMicrousd. | | GET | /v1/requests/{requestId} | same key | Status polling does not create a new debit. |
Endpoint Details
Scrape Website
Use POST /v1/scrape/website. Crawl website pages and return clean text and markdown per page.
Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.
Safety:
- Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
- Send a unique Idempotency-Key for every POST.
- Set an explicit customer spend cap with maxCostUsd or maxCostMicrousd before starting a scrape.
- Start with small result caps such as maxItems or capability-specific limits.
- Poll next.path while status is running and report the final debitMicrousd.
Example body:
{
"maxCostUsd": "1.00",
"waitForFinishSecs": 60,
"urls": [
"https://example.com"
],
"maxPages": 1
}
Scrape LinkedIn Profile
Use POST /v1/scrape/linkedin/profile. Scrape public LinkedIn profile details.
Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.
Safety:
- Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
- Send a unique Idempotency-Key for every POST.
- Set an explicit customer spend cap with maxCostUsd or maxCostMicrousd before starting a scrape.
- Start with small result caps such as maxItems or capability-specific limits.
- Poll next.path while status is running and report the final debitMicrousd.
Example body:
{
"maxCostUsd": "0.05",
"waitForFinishSecs": 60,
"profiles": [
"williamhgates"
]
}
Scrape GitHub Profile
Use POST /v1/scrape/github/profile. Scrape public GitHub profile details.
Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.
Safety:
- Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
- Send a unique Idempotency-Key for every POST.
- Set an explicit customer spend cap with maxCostUsd or maxCostMicrousd before starting a scrape.
- Start with small result caps such as maxItems or capability-specific limits.
- Poll next.path while status is running and report the final debitMicrousd.
Example body:
{
"maxCostUsd": "0.03",
"waitForFinishSecs": 60,
"usernames": [
"octocat"
]
}
Search X/Twitter
Use POST /v1/scrape/twitter/search. Scrape X/Twitter posts from a search query or account handles.
Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.
Safety:
- Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
- Send a unique Idempotency-Key for every POST.
- Set an explicit customer spend cap with maxCostUsd or maxCostMicrousd before starting a scrape.
- Start with small result caps such as maxItems or capability-specific limits.
- Poll next.path while status is running and report the final debitMicrousd.
Example body:
{
"maxCostUsd": "0.03",
"waitForFinishSecs": 60,
"handles": [
"nasa"
],
"maxItems": 1,
"sort": "latest"
}
Scrape LinkedIn Jobs
Use POST /v1/scrape/linkedin/jobs. Scrape public LinkedIn job listings for a search query.
Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.
Safety:
- Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
- Send a unique Idempotency-Key for every POST.
- Set an explicit customer spend cap with maxCostUsd or maxCostMicrousd before starting a scrape.
- Start with small result caps such as maxItems or capability-specific limits.
- Poll next.path while status is running and report the final debitMicrousd.
Example body:
{
"maxCostUsd": "0.05",
"waitForFinishSecs": 60,
"query": "software engineer",
"location": "United States",
"maxItems": 5
}
Scrape LinkedIn Company
Use POST /v1/scrape/linkedin/company. Scrape public LinkedIn company pages for firmographic details.
Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.
Safety:
- Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
- Send a unique Idempotency-Key for every POST.
- Set an explicit customer spend cap with maxCostUsd or maxCostMicrousd before starting a scrape.
- Start with small result caps such as maxItems or capability-specific limits.
- Poll next.path while status is running and report the final debitMicrousd.
Example body:
{
"maxCostUsd": "0.05",
"waitForFinishSecs": 60,
"companies": [
"microsoft"
]
}
Search LinkedIn People
Use POST /v1/scrape/linkedin/people. Search public LinkedIn profiles by role, location, company, or school. Requires maxCostUsd of at least 0.50.
Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.
Safety:
- Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
- Send a unique Idempotency-Key for every POST.
- Set an explicit customer spend cap with maxCostUsd or maxCostMicrousd before starting a scrape.
- Start with small result caps such as maxItems or capability-specific limits.
- Poll next.path while status is running and report the final debitMicrousd.
Example body:
{
"maxCostUsd": "0.50",
"waitForFinishSecs": 60,
"titles": [
"Founder"
],
"locations": [
"San Francisco"
],
"maxItems": 5
}
Scrape LinkedIn Posts
Use POST /v1/scrape/linkedin/posts. Scrape recent public posts from LinkedIn profiles or company pages.
Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.
Safety:
- Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
- Send a unique Idempotency-Key for every POST.
- Set an explicit customer spend cap with maxCostUsd or maxCostMicrousd before starting a scrape.
- Start with small result caps such as maxItems or capability-specific limits.
- Poll next.path while status is running and report the final debitMicrousd.
Example body:
{
"maxCostUsd": "0.05",
"waitForFinishSecs": 60,
"profiles": [
"williamhgates"
],
"maxItems": 3
}
Scrape X/Twitter User
Use POST /v1/scrape/twitter/user. Scrape public X/Twitter account profiles, with optional follower and following lists.
Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.
Safety:
- Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
- Send a unique Idempotency-Key for every POST.
- Set an explicit customer spend cap with maxCostUsd or maxCostMicrousd before starting a scrape.
- Start with small result caps such as maxItems or capability-specific limits.
- Poll next.path while status is running and report the final debitMicrousd.
Example body:
{
"maxCostUsd": "0.05",
"waitForFinishSecs": 60,
"handles": [
"nasa"
]
}
Scrape X/Twitter Replies
Use POST /v1/scrape/twitter/replies. Scrape the public reply thread of an X/Twitter post. Requires maxCostUsd of at least 0.20.
Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.
Safety:
- Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
- Send a unique Idempotency-Key for every POST.
- Set an explicit customer
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: davidondrej
- Source: davidondrej/skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.