Billing Automation
wshobson/agents
Covers building subscription billing: billing cycles, subscription states, invoice generation, proration, tax handling and dunning for failed payments.
Send and receive faxes programmatically. An agent skill from majiayu000/claude-skill-registry.
$ npx skills add majiayu000/claude-skill-registry --skill telnyx-fax-python -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install majiayu000/claude-skill-registry telnyx-fax-python --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/majiayu000/claude-skill-registry.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/api/telnyx-fax-python .claude/skills/telnyx-fax-python && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "telnyx-fax-python" agent skill from https://github.com/majiayu000/claude-skill-registry/tree/main/skills/api/telnyx-fax-python into .claude/skills/telnyx-fax-python/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "telnyx-fax-python", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/majiayu000/claude-skill-registry/tree/main/skills/api/telnyx-fax-pythonType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add majiayu000/claude-skill-registry --skill telnyx-fax-python -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install majiayu000/claude-skill-registry telnyx-fax-python --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/majiayu000/claude-skill-registry.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/api/telnyx-fax-python .agents/skills/telnyx-fax-python && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "telnyx-fax-python" agent skill from https://github.com/majiayu000/claude-skill-registry/tree/main/skills/api/telnyx-fax-python into .agents/skills/telnyx-fax-python/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "telnyx-fax-python", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add majiayu000/claude-skill-registry --skill telnyx-fax-python -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install majiayu000/claude-skill-registry telnyx-fax-python --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/majiayu000/claude-skill-registry.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/api/telnyx-fax-python .cursor/skills/telnyx-fax-python && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "telnyx-fax-python" agent skill from https://github.com/majiayu000/claude-skill-registry/tree/main/skills/api/telnyx-fax-python into .cursor/skills/telnyx-fax-python/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "telnyx-fax-python", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/majiayu000/claude-skill-registry.git --path skills/api/telnyx-fax-python--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add majiayu000/claude-skill-registry --skill telnyx-fax-python -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install majiayu000/claude-skill-registry telnyx-fax-python --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/majiayu000/claude-skill-registry.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/api/telnyx-fax-python .gemini/skills/telnyx-fax-python && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "telnyx-fax-python" agent skill from https://github.com/majiayu000/claude-skill-registry/tree/main/skills/api/telnyx-fax-python into .gemini/skills/telnyx-fax-python/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "telnyx-fax-python", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install majiayu000/claude-skill-registry telnyx-fax-pythonInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add majiayu000/claude-skill-registry --skill telnyx-fax-python -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/majiayu000/claude-skill-registry.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/api/telnyx-fax-python .github/skills/telnyx-fax-python && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "telnyx-fax-python" agent skill from https://github.com/majiayu000/claude-skill-registry/tree/main/skills/api/telnyx-fax-python into .github/skills/telnyx-fax-python/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "telnyx-fax-python", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add majiayu000/claude-skill-registry --skill telnyx-fax-python -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install majiayu000/claude-skill-registry telnyx-fax-python --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/majiayu000/claude-skill-registry.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/api/telnyx-fax-python .opencode/skills/telnyx-fax-python && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "telnyx-fax-python" agent skill from https://github.com/majiayu000/claude-skill-registry/tree/main/skills/api/telnyx-fax-python into .opencode/skills/telnyx-fax-python/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "telnyx-fax-python", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
telnyx-fax-pythonSend and receive faxes programmatically. An agent skill from majiayu000/claude-skill-registry.
Telnyx Fax Python is an agent skill from majiayu000/claude-skill-registry. Send and receive faxes programmatically. Manage fax applications and media. This skill provides Python SDK examples.
Its SKILL.md is about 4.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `metadata.json`).
It sits in Backend & APIs. It works with Python. The repository describes itself as: Searchable Claude Code skills catalog with source-linked guides and generated registry artifacts. The licence is MIT.
Read from SKILL.md and the folder at commit 2d14a69. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pipFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pip, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
TELNYX_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Telnyx Fax Python loads about 4.8k tokens when it runs. Until then it costs about 34 tokens; SKILL.md has 1,777 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from majiayu000/claude-skill-registry at commit 2d14a69, republished under its MIT licence (© majiayu000). 1,777 words, ~4,774 tokens.
.claude/skills/telnyx-fax-python/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->
pip install telnyximport os
from telnyx import Telnyx
client = Telnyx(
api_key=os.environ.get("TELNYX_API_KEY"), # This is the default and can be omitted
)All examples below assume client is already initialized as shown above.
All API calls can fail with network errors, rate limits (429), validation errors (422), or authentication errors (401). Always handle errors in production code:
import telnyx
try:
result = client.messages.send(to="+13125550001", from_="+13125550002", text="Hello")
except telnyx.APIConnectionError:
print("Network error — check connectivity and retry")
except telnyx.RateLimitError:
# 429: rate limited — wait and retry with exponential backoff
import time
time.sleep(1) # Check Retry-After header for actual delay
except telnyx.APIStatusError as e:
print(f"API error {e.status_code}: {e.message}")
if e.status_code == 422:
print("Validation error — check required fields and formats")Common error codes: 401 invalid API key, 403 insufficient permissions,
404 resource not found, 422 validation error (check field formats),
429 rate limited (retry with exponential backoff).
+13125550001). Include the + prefix and country code. No spaces, dashes, or parentheses.for item in page_result: to iterate through all pages automatically.This endpoint returns a list of your Fax Applications inside the 'data' attribute of the response. You can adjust which applications are listed by using filters. Fax Applications are used to configure how you send and receive faxes using the Programmable Fax API with Telnyx.
GET /fax_applications
page = client.fax_applications.list()
page = page.data[0]
print(page.id)Returns: active (boolean), anchorsite_override (enum: Latency, Chicago, IL, Ashburn, VA, San Jose, CA, Sydney, Australia, Amsterdam, Netherlands, London, UK, Toronto, Canada, Vancouver, Canada, Frankfurt, Germany), application_name (string), created_at (string), id (string), inbound (object), outbound (object), record_type (string), tags (array[string]), updated_at (string), webhook_event_failover_url (uri), webhook_event_url (uri), webhook_timeout_secs (integer | null)
Creates a new Fax Application based on the parameters sent in the request. The application name and webhook URL are required. Once created, you can assign phone numbers to your application using the /phone_numbers endpoint.
POST /fax_applications — Required: application_name, webhook_event_url
Optional: active (boolean), anchorsite_override (enum: Latency, Chicago, IL, Ashburn, VA, San Jose, CA, Sydney, Australia, Amsterdam, Netherlands, London, UK, Toronto, Canada, Vancouver, Canada, Frankfurt, Germany), inbound (object), outbound (object), tags (array[string]), webhook_event_failover_url (uri), webhook_timeout_secs (integer | null)
fax_application = client.fax_applications.create(
application_name="fax-router",
webhook_event_url="https://example.com",
)
print(fax_application.data)Returns: active (boolean), anchorsite_override (enum: Latency, Chicago, IL, Ashburn, VA, San Jose, CA, Sydney, Australia, Amsterdam, Netherlands, London, UK, Toronto, Canada, Vancouver, Canada, Frankfurt, Germany), application_name (string), created_at (string), id (string), inbound (object), outbound (object), record_type (string), tags (array[string]), updated_at (string), webhook_event_failover_url (uri), webhook_event_url (uri), webhook_timeout_secs (integer | null)
Return the details of an existing Fax Application inside the 'data' attribute of the response.
GET /fax_applications/{id}
fax_application = client.fax_applications.retrieve(
"1293384261075731499",
)
print(fax_application.data)Returns: active (boolean), anchorsite_override (enum: Latency, Chicago, IL, Ashburn, VA, San Jose, CA, Sydney, Australia, Amsterdam, Netherlands, London, UK, Toronto, Canada, Vancouver, Canada, Frankfurt, Germany), application_name (string), created_at (string), id (string), inbound (object), outbound (object), record_type (string), tags (array[string]), updated_at (string), webhook_event_failover_url (uri), webhook_event_url (uri), webhook_timeout_secs (integer | null)
Updates settings of an existing Fax Application based on the parameters of the request.
PATCH /fax_applications/{id} — Required: application_name, webhook_event_url
Optional: active (boolean), anchorsite_override (enum: Latency, Chicago, IL, Ashburn, VA, San Jose, CA, Sydney, Australia, Amsterdam, Netherlands, London, UK, Toronto, Canada, Vancouver, Canada, Frankfurt, Germany), fax_email_recipient (string | null), inbound (object), outbound (object), tags (array[string]), webhook_event_failover_url (uri), webhook_timeout_secs (integer | null)
fax_application = client.fax_applications.update(
id="1293384261075731499",
application_name="fax-router",
webhook_event_url="https://example.com",
)
print(fax_application.data)Returns: active (boolean), anchorsite_override (enum: Latency, Chicago, IL, Ashburn, VA, San Jose, CA, Sydney, Australia, Amsterdam, Netherlands, London, UK, Toronto, Canada, Vancouver, Canada, Frankfurt, Germany), application_name (string), created_at (string), id (string), inbound (object), outbound (object), record_type (string), tags (array[string]), updated_at (string), webhook_event_failover_url (uri), webhook_event_url (uri), webhook_timeout_secs (integer | null)
Permanently deletes a Fax Application. Deletion may be prevented if the application is in use by phone numbers.
DELETE /fax_applications/{id}
fax_application = client.fax_applications.delete(
"1293384261075731499",
)
print(fax_application.data)Returns: active (boolean), anchorsite_override (enum: Latency, Chicago, IL, Ashburn, VA, San Jose, CA, Sydney, Australia, Amsterdam, Netherlands, London, UK, Toronto, Canada, Vancouver, Canada, Frankfurt, Germany), application_name (string), created_at (string), id (string), inbound (object), outbound (object), record_type (string), tags (array[string]), updated_at (string), webhook_event_failover_url (uri), webhook_event_url (uri), webhook_timeout_secs (integer | null)
GET /faxes
page = client.faxes.list()
page = page.data[0]
print(page.id)Returns: client_state (string), connection_id (string), created_at (date-time), direction (enum: inbound, outbound), from (string), from_display_name (string), id (uuid), media_name (string), media_url (string), preview_url (string), quality (enum: normal, high, very_high, ultra_light, ultra_dark), record_type (enum: fax), status (enum: queued, media.processed, originated, sending, delivered, failed, initiated, receiving, media.processing, received), store_media (boolean), stored_media_url (string), to (string), updated_at (date-time), webhook_failover_url (string), webhook_url (string)
Send a fax. Files have size limits and page count limit validations. If a file is bigger than 50MB or has more than 350 pages it will fail with file_size_limit_exceeded and page_count_limit_exceeded respectively.
POST /faxes — Required: connection_id, from, to
Optional: black_threshold (integer), client_state (string), from_display_name (string), media_name (string), media_url (string), monochrome (boolean), preview_format (enum: pdf, tiff), quality (enum: normal, high, very_high, ultra_light, ultra_dark), store_media (boolean), store_preview (boolean), t38_enabled (boolean), webhook_url (string)
fax = client.faxes.create(
connection_id="234423",
from_="+13125790015",
to="+13127367276",
media_url="https://example.com/document.pdf",
)
print(fax.data)Returns: client_state (string), connection_id (string), created_at (date-time), direction (enum: inbound, outbound), from (string), from_display_name (string), id (uuid), media_name (string), media_url (string), preview_url (string), quality (enum: normal, high, very_high, ultra_light, ultra_dark), record_type (enum: fax), status (enum: queued, media.processed, originated, sending, delivered, failed, initiated, receiving, media.processing, received), store_media (boolean), stored_media_url (string), to (string), updated_at (date-time), webhook_failover_url (string), webhook_url (string)
GET /faxes/{id}
fax = client.faxes.retrieve(
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
print(fax.data)Returns: client_state (string), connection_id (string), created_at (date-time), direction (enum: inbound, outbound), from (string), from_display_name (string), id (uuid), media_name (string), media_url (string), preview_url (string), quality (enum: normal, high, very_high, ultra_light, ultra_dark), record_type (enum: fax), status (enum: queued, media.processed, originated, sending, delivered, failed, initiated, receiving, media.processing, received), store_media (boolean), stored_media_url (string), to (string), updated_at (date-time), webhook_failover_url (string), webhook_url (string)
DELETE /faxes/{id}
client.faxes.delete(
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)Cancel the outbound fax that is in one of the following states: queued, media.processed, originated or sending
POST /faxes/{id}/actions/cancel
response = client.faxes.actions.cancel(
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
print(response.data)Returns: result (string)
Refreshes the inbound fax's media_url when it has expired
POST /faxes/{id}/actions/refresh
response = client.faxes.actions.refresh(
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
print(response.data)Returns: result (string)
Telnyx signs webhooks with Ed25519. Each request includes telnyx-signature-ed25519
and telnyx-timestamp headers. Always verify signatures in production:
# In your webhook handler (e.g., Flask — use raw body, not parsed JSON):
@app.route("/webhooks", methods=["POST"])
def handle_webhook():
payload = request.get_data(as_text=True) # raw body as string
headers = dict(request.headers)
try:
event = client.webhooks.unwrap(payload, headers=headers)
except Exception as e:
print(f"Webhook verification failed: {e}")
return "Invalid signature", 400
# Signature valid — event is the parsed webhook payload
print(f"Received event: {event.data.event_type}")
return "OK", 200The following webhook events are sent to your configured webhook URL.
All webhooks include telnyx-timestamp and telnyx-signature-ed25519 headers for Ed25519 signature verification. Use client.webhooks.unwrap() to verify.
| Event | Description |
|---|---|
fax.delivered | Fax Delivered |
fax.failed | Fax Failed |
fax.media.processed | Fax Media Processed |
fax.queued | Fax Queued |
fax.sending.started | Fax Sending Started |
fax.delivered
| Field | Type | Description |
|---|---|---|
data.record_type | enum: event | Identifies the type of the resource. |
data.id | uuid | Identifies the type of resource. |
data.occurred_at | date-time | ISO 8601 datetime of when the event occurred. |
data.event_type | enum: fax.delivered | The type of event being delivered. |
data.payload.call_duration_secs | integer | The duration of the call in seconds. |
data.payload.connection_id | string | The ID of the connection used to send the fax. |
data.payload.direction | enum: inbound, outbound | The direction of the fax. |
data.payload.fax_id | uuid | Identifies the fax. |
data.payload.original_media_url | string | The original URL to the PDF used for the fax's media. |
data.payload.media_name | string | The media_name used for the fax's media. |
data.payload.to | string | The phone number, in E.164 format, the fax will be sent to or SIP URI |
data.payload.from | string | The phone number, in E.164 format, the fax will be sent from. |
data.payload.user_id | uuid | Identifier of the user to whom the fax belongs |
data.payload.page_count | integer | Number of transferred pages |
data.payload.status | enum: delivered | The status of the fax. |
data.payload.client_state | string | State received from a command. |
meta.attempt | integer | The delivery attempt number. |
meta.delivered_to | uri | The URL the webhook was delivered to. |
fax.failed
| Field | Type | Description |
|---|---|---|
data.record_type | enum: event | Identifies the type of the resource. |
data.id | uuid | Identifies the type of resource. |
data.occurred_at | date-time | ISO 8601 datetime of when the event occurred. |
data.event_type | enum: fax.failed | The type of event being delivered. |
data.payload.connection_id | string | The ID of the connection used to send the fax. |
data.payload.direction | enum: inbound, outbound | The direction of the fax. |
data.payload.fax_id | uuid | Identifies the fax. |
data.payload.original_media_url | string | The original URL to the PDF used for the fax's media. |
data.payload.media_name | string | The media_name used for the fax's media. |
data.payload.to | string | The phone number, in E.164 format, the fax will be sent to or SIP URI |
data.payload.from | string | The phone number, in E.164 format, the fax will be sent from. |
data.payload.user_id | uuid | Identifier of the user to whom the fax belongs |
data.payload.failure_reason | enum: rejected | Cause of the sending failure |
data.payload.status | enum: failed | The status of the fax. |
data.payload.client_state | string | State received from a command. |
meta.attempt | integer | The delivery attempt number. |
meta.delivered_to | uri | The URL the webhook was delivered to. |
fax.media.processed
| Field | Type | Description |
|---|---|---|
data.record_type | enum: event | Identifies the type of the resource. |
data.id | uuid | Identifies the type of resource. |
data.occurred_at | date-time | ISO 8601 datetime of when the event occurred. |
data.event_type | enum: fax.media.processed | The type of event being delivered. |
data.payload.connection_id | string | The ID of the connection used to send the fax. |
data.payload.direction | enum: inbound, outbound | The direction of the fax. |
data.payload.fax_id | uuid | Identifies the fax. |
data.payload.original_media_url | string | The original URL to the PDF used for the fax's media. |
data.payload.media_name | string | The media_name used for the fax's media. |
data.payload.to | string | The phone number, in E.164 format, the fax will be sent to or SIP URI |
data.payload.from | string | The phone number, in E.164 format, the fax will be sent from. |
data.payload.user_id | uuid | Identifier of the user to whom the fax belongs |
data.payload.status | enum: media.processed | The status of the fax. |
data.payload.client_state | string | State received from a command. |
meta.attempt | integer | The delivery attempt number. |
meta.delivered_to | uri | The URL the webhook was delivered to. |
fax.queued
| Field | Type | Description |
|---|---|---|
data.record_type | enum: event | Identifies the type of the resource. |
data.id | uuid | Identifies the type of resource. |
data.occurred_at | date-time | ISO 8601 datetime of when the event occurred. |
data.event_type | enum: fax.queued | The type of event being delivered. |
data.payload.connection_id | string | The ID of the connection used to send the fax. |
data.payload.direction | enum: inbound, outbound | The direction of the fax. |
data.payload.fax_id | uuid | Identifies the fax. |
data.payload.original_media_url | string | The original URL to the PDF used for the fax's media. |
data.payload.media_name | string | The media_name used for the fax's media. |
data.payload.to | string | The phone number, in E.164 format, the fax will be sent to or SIP URI |
data.payload.from | string | The phone number, in E.164 format, the fax will be sent from. |
data.payload.user_id | uuid | Identifier of the user to whom the fax belongs |
data.payload.status | enum: queued | The status of the fax. |
data.payload.client_state | string | State received from a command. |
meta.attempt | integer | The delivery attempt number. |
meta.delivered_to | uri | The URL the webhook was delivered to. |
fax.sending.started
| Field | Type | Description |
|---|---|---|
data.record_type | enum: event | Identifies the type of the resource. |
data.id | uuid | Identifies the type of resource. |
data.occurred_at | date-time | ISO 8601 datetime of when the event occurred. |
data.event_type | enum: fax.sending.started | The type of event being delivered. |
data.payload.connection_id | string | The ID of the connection used to send the fax. |
data.payload.direction | enum: inbound, outbound | The direction of the fax. |
data.payload.fax_id | uuid | Identifies the fax. |
data.payload.original_media_url | string | The original URL to the PDF used for the fax's media. |
data.payload.media_name | string | The media_name used for the fax's media. |
data.payload.to | string | The phone number, in E.164 format, the fax will be sent to or SIP URI |
data.payload.from | string | The phone number, in E.164 format, the fax will be sent from. |
data.payload.user_id | uuid | Identifier of the user to whom the fax belongs |
data.payload.status | enum: sending | The status of the fax. |
data.payload.client_state | string | State received from a command. |
meta.attempt | integer | The delivery attempt number. |
meta.delivered_to | uri | The URL the webhook was delivered to. |
© majiayu000, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in skills/api/telnyx-fax-python of majiayu000/claude-skill-registry.
Open the folder on GitHubat commit 2d14a69
We found 3 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in majiayu000/claude-skill-registry, which our catalogue first saw on October 7, 2026.
Telnyx Fax Python next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Telnyx Fax Python this skillmajiayu000/claude-skill-registry | 666 | 1 repos | ~4.8k | Automated safety check: Pass | MIT | |
| Billing Automationwshobson/agents | 40k | 14 repos | ~473 | Automated safety check: Pass | MIT | |
| Zhihu Searchitwanger/toBeBetterJavaer | 18k | — | ~1.5k | Automated safety check: Pass | None | |
| Trigger.dev Configurationpapermark/papermark | 9.2k | — | ~1.2k | Automated safety check: Pass | Custom licence | |
| AWS Serverless Edazxkane/aws-skills | 367 | 4 repos | ~3.2k | Automated safety check: Pass | MIT | |
| Fastcrudbenavlabs/fastcrud | 1.6k | — | ~5k | Automated safety check: Pass | MIT |
wshobson/agents
Covers building subscription billing: billing cycles, subscription states, invoice generation, proration, tax handling and dunning for failed payments.
itwanger/toBeBetterJavaer
Search Zhihu for content using the searchv3 API. An agent skill from itwanger/toBeBetterJavaer.
papermark/papermark
Configures Trigger.dev projects through trigger.config.ts, with build extensions for Prisma, Playwright, Puppeteer, FFmpeg, Python and system packages.
zxkane/aws-skills
AWS serverless and event-driven architecture expert based on Well-Architected Framework.
benavlabs/fastcrud
A skill your agent uses when building or modifying CRUD endpoints with FastCRUD (the fastcrud PyPI package) in a FastAPI project — covers FastCRUD, crudrouter, EndpointCreator, FilterConfig…
google-gemini/gemini-skills
A skill your agent uses when building real-time, bidirectional streaming applications with the Gemini Live API, or migrating legacy Live models (2.0/2.5/3.1) to Gemini 3.8 Live.
majiayu000/claude-skill-registry
Multi-source deep research using firecrawl and exa MCPs. An agent skill from majiayu000/claude-skill-registry.
majiayu000/claude-skill-registry
Neural search via Exa MCP for web, code, and company research.
majiayu000/claude-skill-registry
Unified media generation via fal.ai MCP — image, video, and audio.
majiayu000/claude-skill-registry
Interact with Zotero reference management libraries using the pyzotero Python client.
majiayu000/claude-skill-registry
Search scientific papers and retrieve structured experimental data extracted from full-text studies via the BGPT MCP server.
majiayu000/claude-skill-registry
Perform pairwise sequence alignment using Biopython Bio.Align.PairwiseAligner.
Works with
Categories
Send and receive faxes programmatically. An agent skill from majiayu000/claude-skill-registry. Telnyx Fax Python is an agent skill from majiayu000/claude-skill-registry. Send and receive faxes programmatically.
Telnyx Fax Python fits situations like: backend & APIs work in your project.
Run `npx skills add majiayu000/claude-skill-registry --skill telnyx-fax-python -a claude-code`. Or copy the skill folder (skills/api/telnyx-fax-python in majiayu000/claude-skill-registry) into .claude/skills/telnyx-fax-python in your project. Claude Code loads it when a task matches its description.
Run `npx skills add majiayu000/claude-skill-registry --skill telnyx-fax-python -a codex`. Or copy the skill folder (skills/api/telnyx-fax-python in majiayu000/claude-skill-registry) into .agents/skills/telnyx-fax-python in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add majiayu000/claude-skill-registry --skill telnyx-fax-python -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/telnyx-fax-python, .gemini/skills/telnyx-fax-python, .github/skills/telnyx-fax-python and .opencode/skills/telnyx-fax-python in your project.
Going by SKILL.md and its folder, Telnyx Fax Python needs the command-line tools its instructions call (pip) and credentials named TELNYX_API_KEY. Our summary lists: Python 3; A credential in TELNYX_API_KEY.
SKILL.md contains no URLs. Its commands use pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Telnyx Fax Python is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.8k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Telnyx Fax Python: Billing Automation (wshobson/agents, 40k stars), Zhihu Search (itwanger/toBeBetterJavaer, 18k stars), Trigger.dev Configuration (papermark/papermark, 9.2k stars) and AWS Serverless Eda (zxkane/aws-skills, 367 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
majiayu000 (a GitHub user) maintains it in majiayu000/claude-skill-registry, which has 666 GitHub stars. The repository holds 1,273 skills in this directory. The repository was last updated on October 7, 2026.
Source: majiayu000/claude-skill-registry on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.