Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Manage call recordings, media storage, Dialogflow integration, and external connections for SIP trunking. This skill provides JavaScript SDK examples.
.claude/skills/team-telnyx-telnyx-sip-integrations-javascript/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 275% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 200% | 0% |
| case-24 | ✗→✓ | ▲ Improved | 794% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 579% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 933% | 0% |
<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->
bashnpm install telnyx@6.74.2
javascriptimport Telnyx from 'telnyx'; const client = new Telnyx({ apiKey: process.env['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:
javascripttry { const result = await client.messages.send({ to: '+13125550001', from: '+13125550002', text: 'Hello' }); } catch (err) { if (err instanceof Telnyx.APIConnectionError) { console.error('Network error — check connectivity and retry'); } else if (err instanceof Telnyx.RateLimitError) { // 429: rate limited — wait and retry with exponential backoff const retryAfter = err.headers?.['retry-after'] || 1; await new Promise(r => setTimeout(r, retryAfter * 1000)); } else if (err instanceof Telnyx.APIError) { console.error(`API error ${err.status}: ${err.message}`); if (err.status === 422) { console.error('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).
for await (const item of result) { ... } to iterate through all pages automatically.Returns the information about custom storage credentials.
GET /custom_storage_credentials/{connection_id}
javascriptconst customStorageCredential = await client.customStorageCredentials.retrieve('connection_id'); console.log(customStorageCredential.connection_id);
Returns: backend (enum: gcs, s3, azure), configuration (object)
Creates a custom storage credentials configuration.
POST /custom_storage_credentials/{connection_id}
javascriptconst customStorageCredential = await client.customStorageCredentials.create('connection_id', { backend: 'gcs', configuration: { backend: 'gcs' }, }); console.log(customStorageCredential.connection_id);
Returns: backend (enum: gcs, s3, azure), configuration (object)
Updates a stored custom credentials configuration.
PUT /custom_storage_credentials/{connection_id}
javascriptconst customStorageCredential = await client.customStorageCredentials.update('connection_id', { backend: 'gcs', configuration: { backend: 'gcs' }, }); console.log(customStorageCredential.connection_id);
Returns: backend (enum: gcs, s3, azure), configuration (object)
Deletes a stored custom credentials configuration.
DELETE /custom_storage_credentials/{connection_id}
javascriptawait client.customStorageCredentials.delete('connection_id');
Return details of the Dialogflow connection associated with the given CallControl connection.
GET /dialogflow_connections/{connection_id}
javascriptconst dialogflowConnection = await client.dialogflowConnections.retrieve('connection_id'); console.log(dialogflowConnection.data);
Returns: connection_id (string), conversation_profile_id (string), environment (string), record_type (string), service_account (string)
Save Dialogflow Credentiails to Telnyx, so it can be used with other Telnyx services.
POST /dialogflow_connections/{connection_id}
javascriptconst dialogflowConnection = await client.dialogflowConnections.create('connection_id', { service_account: { type: 'bar', project_id: 'bar', private_key_id: 'bar', private_key: 'bar', client_email: 'bar', client_id: 'bar', auth_uri: 'bar', token_uri: 'bar', auth_provider_x509_cert_url: 'bar', client_x509_cert_url: 'bar', }, }); console.log(dialogflowConnection.data);
Returns: connection_id (string), conversation_profile_id (string), environment (string), record_type (string), service_account (string)
Updates a stored Dialogflow Connection.
PUT /dialogflow_connections/{connection_id}
javascriptconst dialogflowConnection = await client.dialogflowConnections.update('connection_id', { service_account: { type: 'bar', project_id: 'bar', private_key_id: 'bar', private_key: 'bar', client_email: 'bar', client_id: 'bar', auth_uri: 'bar', token_uri: 'bar', auth_provider_x509_cert_url: 'bar', client_x509_cert_url: 'bar', }, }); console.log(dialogflowConnection.data);
Returns: connection_id (string), conversation_profile_id (string), environment (string), record_type (string), service_account (string)
Deletes a stored Dialogflow Connection.
DELETE /dialogflow_connections/{connection_id}
javascriptawait client.dialogflowConnections.delete('connection_id');
This endpoint returns a list of your External Connections inside the 'data' attribute of the response. External Connections are used by Telnyx customers to seamless configure SIP trunking integrations with Telnyx Partners, through External Voice Integrations in Mission Control Portal.
GET /external_connections
javascript// Automatically fetches more pages as needed. for await (const externalConnection of client.externalConnections.list()) { console.log(externalConnection.id); }
Returns: active (boolean), created_at (string), credential_active (boolean), external_sip_connection (enum: zoom, operator_connect), id (string), inbound (object), outbound (object), record_type (string), tags (arraystring]), updated_at (string), webhook_api_version (enum: 1, 2), webhook_event_failover_url (uri), webhook_event_url (uri), webhook_timeout_secs (integer | null)
Creates a new External Connection based on the parameters sent in the request. The external_sip_connection and outbound voice profile id are required. Once created, you can assign phone numbers to your application using the /phone_numbers endpoint.
POST /external_connections — Required: external_sip_connection, outbound
Optional: active (boolean), inbound (object), tags (arraystring]), webhook_event_failover_url (uri), webhook_event_url (uri), webhook_timeout_secs (integer | null)
javascriptconst externalConnection = await client.externalConnections.create({ external_sip_connection: 'zoom', outbound: {}, }); console.log(externalConnection.data);
Returns: active (boolean), created_at (string), credential_active (boolean), external_sip_connection (enum: zoom, operator_connect), id (string), inbound (object), outbound (object), record_type (string), tags (arraystring]), updated_at (string), webhook_api_version (enum: 1, 2), webhook_event_failover_url (uri), webhook_event_url (uri), webhook_timeout_secs (integer | null)
Retrieve a list of log messages for all external connections associated with your account.
GET /external_connections/log_messages
javascript// Automatically fetches more pages as needed. for await (const logMessageListResponse of client.externalConnections.logMessages.list()) { console.log(logMessageListResponse.code); }
Returns: log_messages (arrayobject]), meta (object)
Retrieve a log message for an external connection associated with your account.
GET /external_connections/log_messages/{id}
javascriptconst logMessage = await client.externalConnections.logMessages.retrieve('1293384261075731499'); console.log(logMessage.log_messages);
Returns: log_messages (arrayobject])
Dismiss a log message for an external connection associated with your account.
DELETE /external_connections/log_messages/{id}
javascriptconst response = await client.externalConnections.logMessages.dismiss('1293384261075731499'); console.log(response.success);
Returns: success (boolean)
Return the details of an existing External Connection inside the 'data' attribute of the response.
GET /external_connections/{id}
javascriptconst externalConnection = await client.externalConnections.retrieve('1293384261075731499'); console.log(externalConnection.data);
Returns: active (boolean), created_at (string), credential_active (boolean), external_sip_connection (enum: zoom, operator_connect), id (string), inbound (object), outbound (object), record_type (string), tags (arraystring]), updated_at (string), webhook_api_version (enum: 1, 2), webhook_event_failover_url (uri), webhook_event_url (uri), webhook_timeout_secs (integer | null)
Updates settings of an existing External Connection based on the parameters of the request.
PATCH /external_connections/{id} — Required: outbound
Optional: active (boolean), inbound (object), tags (arraystring]), webhook_event_failover_url (uri), webhook_event_url (uri), webhook_timeout_secs (integer | null)
javascriptconst externalConnection = await client.externalConnections.update('1293384261075731499', { outbound: { outbound_voice_profile_id: '1911630617284445511' }, }); console.log(externalConnection.data);
Returns: active (boolean), created_at (string), credential_active (boolean), external_sip_connection (enum: zoom, operator_connect), id (string), inbound (object), outbound (object), record_type (string), tags (arraystring]), updated_at (string), webhook_api_version (enum: 1, 2), webhook_event_failover_url (uri), webhook_event_url (uri), webhook_timeout_secs (integer | null)
Permanently deletes an External Connection. Deletion may be prevented if the application is in use by phone numbers, is active, or if it is an Operator Connect connection. To remove an Operator Connect integration please contact Telnyx support.
DELETE /external_connections/{id}
javascriptconst externalConnection = await client.externalConnections.delete('1293384261075731499'); console.log(externalConnection.data);
Returns: active (boolean), created_at (string), credential_active (boolean), external_sip_connection (enum: zoom, operator_connect), id (string), inbound (object), outbound (object), record_type (string), tags (arraystring]), updated_at (string), webhook_api_version (enum: 1, 2), webhook_event_failover_url (uri), webhook_event_url (uri), webhook_timeout_secs (integer | null)
Returns the civic addresses and locations from Microsoft Teams.
GET /external_connections/{id}/civic_addresses
javascriptconst civicAddresses = await client.externalConnections.civicAddresses.list('1293384261075731499'); console.log(civicAddresses.data);
Returns: city_or_town (string), city_or_town_alias (string), company_name (string), country (string), country_or_district (string), default_location_id (uuid), description (string), house_number (string), house_number_suffix (string), id (uuid), locations (arrayobject]), postal_or_zip_code (string), record_type (string), state_or_province (string), street_name (string), street_suffix (string)
Return the details of an existing Civic Address with its Locations inside the 'data' attribute of the response.
GET /external_connections/{id}/civic_addresses/{address_id}
javascriptconst civicAddress = await client.externalConnections.civicAddresses.retrieve( '318fb664-d341-44d2-8405-e6bfb9ced6d9', { id: '1293384261075731499' }, ); console.log(civicAddress.data);
Returns: city_or_town (string), city_or_town_alias (string), company_name (string), country (string), country_or_district (string), default_location_id (uuid), description (string), house_number (string), house_number_suffix (string), id (uuid), locations (arrayobject]), postal_or_zip_code (string), record_type (string), state_or_province (string), street_name (string), street_suffix (string)
PATCH /external_connections/{id}/locations/{location_id} — Required: static_emergency_address_id
javascriptconst response = await client.externalConnections.updateLocation( '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', { id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', static_emergency_address_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', }, ); console.log(response.data);
Returns: accepted_address_suggestions (boolean), location_id (uuid), static_emergency_address_id (uuid)
Returns a list of all active phone numbers associated with the given external connection.
GET /external_connections/{id}/phone_numbers
javascript// Automatically fetches more pages as needed. for await (const externalConnectionPhoneNumber of client.externalConnections.phoneNumbers.list( '1293384261075731499', )) { console.log(externalConnectionPhoneNumber.civic_address_id); }
Returns: acquired_capabilities (arraystring]), civic_address_id (uuid), displayed_country_code (string), location_id (uuid), number_id (string), telephone_number (string), ticket_id (uuid)
Return the details of a phone number associated with the given external connection.
GET /external_connections/{id}/phone_numbers/{phone_number_id}
javascriptconst phoneNumber = await client.externalConnections.phoneNumbers.retrieve('1234567889', { id: '1293384261075731499', }); console.log(phoneNumber.data);
Returns: acquired_capabilities (arraystring]), civic_address_id (uuid), displayed_country_code (string), location_id (uuid), number_id (string), telephone_number (string), ticket_id (uuid)
Asynchronously update settings of the phone number associated with the given external connection.
PATCH /external_connections/{id}/phone_numbers/{phone_number_id}
Optional: location_id (uuid)
javascriptconst phoneNumber = await client.externalConnections.phoneNumbers.update('1234567889', { id: '1293384261075731499', }); console.log(phoneNumber.data);
Returns: acquired_capabilities (arraystring]), civic_address_id (uuid), displayed_country_code (string), location_id (uuid), number_id (string), telephone_number (string), ticket_id (uuid)
Returns a list of your Releases for the given external connection. These are automatically created when you change the connection_id of a phone number that is currently on Microsoft Teams.
GET /external_connections/{id}/releases
javascript// Automatically fetches more pages as needed. for await (const releaseListResponse of client.externalConnections.releases.list( '1293384261075731499', )) { console.log(releaseListResponse.tenant_id); }
Returns: created_at (string), error_message (string), status (enum: pending_upload, pending, in_progress, complete, failed, expired, unknown), telephone_numbers (arrayobject]), tenant_id (uuid), ticket_id (uuid)
Return the details of a Release request and its phone numbers.
GET /external_connections/{id}/releases/{release_id}
javascriptconst release = await client.externalConnections.releases.retrieve( '7b6a6449-b055-45a6-81f6-f6f0dffa4cc6', { id: '1293384261075731499' }, ); console.log(release.data);
Returns: created_at (string), error_message (string), status (enum: pending_upload, pending, in_progress, complete, failed, expired, unknown), telephone_numbers (arrayobject]), tenant_id (uuid), ticket_id (uuid)
Returns a list of your Upload requests for the given external connection.
GET /external_connections/{id}/uploads
javascript// Automatically fetches more pages as needed. for await (const upload of client.externalConnections.uploads.list('1293384261075731499')) { console.log(upload.location_id); }
Returns: available_usages (arraystring]), error_code (string), error_message (string), location_id (uuid), status (enum: pending_upload, pending, in_progress, partial_success, success, error), tenant_id (uuid), ticket_id (uuid), tn_upload_entries (arrayobject])
Creates a new Upload request to Microsoft teams with the included phone numbers. Only one of civic_address_id or location_id must be provided, not both. The maximum allowed phone numbers for the numbers_ids array is 1000.
POST /external_connections/{id}/uploads — Required: number_ids
Optional: additional_usages (arraystring]), civic_address_id (uuid), location_id (uuid), usage (enum: calling_user_assignment, first_party_app_assignment)
javascriptconst upload = await client.externalConnections.uploads.create('1293384261075731499', { number_ids: [ '3920457616934164700', '3920457616934164701', '3920457616934164702', '3920457616934164703', ], }); console.log(upload.ticket_id);
Returns: success (boolean), ticket_id (uuid)
Forces a recheck of the status of all pending Upload requests for the given external connection in the background.
POST /external_connections/{id}/uploads/refresh
javascriptconst response = await client.externalConnections.uploads.refreshStatus('1293384261075731499'); console.log(response.success);
Returns: success (boolean)
Returns the count of all pending upload requests for the given external connection.
GET /external_connections/{id}/uploads/status
javascriptconst response = await client.externalConnections.uploads.pendingCount('1293384261075731499'); console.log(response.data);
Returns: pending_numbers_count (integer), pending_orders_count (integer)
Return the details of an Upload request and its phone numbers.
GET /external_connections/{id}/uploads/{ticket_id}
javascriptconst upload = await client.externalConnections.uploads.retrieve( '7b6a6449-b055-45a6-81f6-f6f0dffa4cc6', { id: '1293384261075731499' }, ); console.log(upload.data);
Returns: available_usages (arraystring]), error_code (string), error_message (string), location_id (uuid), status (enum: pending_upload, pending, in_progress, partial_success, success, error), tenant_id (uuid), ticket_id (uuid), tn_upload_entries (arrayobject])
If there were any errors during the upload process, this endpoint will retry the upload request. In some cases this will reattempt the existing upload request, in other cases it may create a new upload request. Please check the ticket_id in the response to determine if a new upload request was created.
POST /external_connections/{id}/uploads/{ticket_id}/retry
javascriptconst response = await client.externalConnections.uploads.retry( '7b6a6449-b055-45a6-81f6-f6f0dffa4cc6', { id: '1293384261075731499' }, ); console.log(response.data);
Returns: available_usages (arraystring]), error_code (string), error_message (string), location_id (uuid), status (enum: pending_upload, pending, in_progress, partial_success, success, error), tenant_id (uuid), ticket_id (uuid), tn_upload_entries (arrayobject])
Returns a list of stored media files.
GET /media
javascriptconst media = await client.media.list(); console.log(media.data);
Returns: content_type (string), created_at (string), expires_at (string), media_name (string), updated_at (string)
Upload media file to Telnyx so it can be used with other Telnyx services
POST /media — Required: media_url
Optional: media_name (string), ttl_secs (integer)
javascriptconst response = await client.media.upload({ media_url: 'http://www.example.com/audio.mp3' }); console.log(response.data);
Returns: content_type (string), created_at (string), expires_at (string), media_name (string), updated_at (string)
Returns the information about a stored media file.
GET /media/{media_name}
javascriptconst media = await client.media.retrieve('media_name'); console.log(media.data);
Returns: content_type (string), created_at (string), expires_at (string), media_name (string), updated_at (string)
Updates a stored media file.
PUT /media/{media_name}
Optional: media_url (string), ttl_secs (integer)
javascriptconst media = await client.media.update('media_name'); console.log(media.data);
Returns: content_type (string), created_at (string), expires_at (string), media_name (string), updated_at (string)
Deletes a stored media file.
DELETE /media/{media_name}
javascriptawait client.media.delete('media_name');
Downloads a stored media file.
GET /media/{media_name}/download
javascriptconst response = await client.media.download('media_name'); console.log(response); const content = await response.blob(); console.log(content);
This endpoint will make an asynchronous request to refresh the Operator Connect integration with Microsoft Teams for the current user. This will create new external connections on the user's account if needed, and/or report the integration results as log messages.
POST /operator_connect/actions/refresh
javascriptconst response = await client.operatorConnect.actions.refresh(); console.log(response.message);
Returns: message (string), success (boolean)
Returns a list of your recording transcriptions.
GET /recording_transcriptions
javascript// Automatically fetches more pages as needed. for await (const recordingTranscription of client.recordingTranscriptions.list()) { console.log(recordingTranscription.id); }
Returns: created_at (string), duration_millis (int32), id (string), record_type (enum: recording_transcription), recording_id (string), status (enum: in-progress, completed), transcription_text (string), updated_at (string)
Retrieves the details of an existing recording transcription.
GET /recording_transcriptions/{recording_transcription_id}
javascriptconst recordingTranscription = await client.recordingTranscriptions.retrieve( '6a09cdc3-8948-47f0-aa62-74ac943d6c58', ); console.log(recordingTranscription.data);
Returns: created_at (string), duration_millis (int32), id (string), record_type (enum: recording_transcription), recording_id (string), status (enum: in-progress, completed), transcription_text (string), updated_at (string)
Permanently deletes a recording transcription.
DELETE /recording_transcriptions/{recording_transcription_id}
javascriptconst recordingTranscription = await client.recordingTranscriptions.delete( '6a09cdc3-8948-47f0-aa62-74ac943d6c58', ); console.log(recordingTranscription.data);
Returns: created_at (string), duration_millis (int32), id (string), record_type (enum: recording_transcription), recording_id (string), status (enum: in-progress, completed), transcription_text (string), updated_at (string)
Returns a list of your call recordings.
GET /recordings
javascript// Automatically fetches more pages as needed. for await (const recordingResponseData of client.recordings.list()) { console.log(recordingResponseData.id); }
Returns: call_control_id (string), call_leg_id (string), call_session_id (string), channels (enum: single, dual), conference_id (string), connection_id (string), created_at (string), download_urls (object), duration_millis (int32), from (string), id (string), initiated_by (string), record_type (enum: recording), recording_ended_at (string), recording_started_at (string), source (enum: conference, call), status (enum: completed), to (string), updated_at (string)
Permanently deletes a list of call recordings.
POST /recordings/actions/delete
javascriptconst action = await client.recordings.actions.delete({ ids: ['428c31b6-7af4-4bcb-b7f5-5013ef9657c1', '428c31b6-7af4-4bcb-b7f5-5013ef9657c2'], }); console.log(action.status);
Returns: status (enum: ok)
Retrieves the details of an existing call recording.
GET /recordings/{recording_id}
javascriptconst recording = await client.recordings.retrieve('recording_id'); console.log(recording.data);
Returns: call_control_id (string), call_leg_id (string), call_session_id (string), channels (enum: single, dual), conference_id (string), connection_id (string), created_at (string), download_urls (object), duration_millis (int32), from (string), id (string), initiated_by (string), record_type (enum: recording), recording_ended_at (string), recording_started_at (string), source (enum: conference, call), status (enum: completed), to (string), updated_at (string)
Permanently deletes a call recording.
DELETE /recordings/{recording_id}
javascriptconst recording = await client.recordings.delete('recording_id'); console.log(recording.data);
Returns: call_control_id (string), call_leg_id (string), call_session_id (string), channels (enum: single, dual), conference_id (string), connection_id (string), created_at (string), download_urls (object), duration_millis (int32), from (string), id (string), initiated_by (string), record_type (enum: recording), recording_ended_at (string), recording_started_at (string), source (enum: conference, call), status (enum: completed), to (string), updated_at (string)
Creates a new SIPREC connector configuration.
POST /siprec_connectors
javascriptconst siprecConnector = await client.siprecConnectors.create({ host: 'siprec.telnyx.com', name: 'my-siprec-connector', port: 5060, }); console.log(siprecConnector.data);
Returns: app_subdomain (string), created_at (string), host (string), name (string), port (integer), record_type (string), updated_at (string)
Returns details of a stored SIPREC connector.
GET /siprec_connectors/{connector_name}
javascriptconst siprecConnector = await client.siprecConnectors.retrieve('connector_name'); console.log(siprecConnector.data);
Returns: app_subdomain (string), created_at (string), host (string), name (string), port (integer), record_type (string), updated_at (string)
Updates a stored SIPREC connector configuration.
PUT /siprec_connectors/{connector_name}
javascriptconst siprecConnector = await client.siprecConnectors.update('connector_name', { host: 'siprec.telnyx.com', name: 'my-siprec-connector', port: 5060, }); console.log(siprecConnector.data);
Returns: app_subdomain (string), created_at (string), host (string), name (string), port (integer), record_type (string), updated_at (string)
Deletes a stored SIPREC connector.
DELETE /siprec_connectors/{connector_name}
javascriptawait client.siprecConnectors.delete('connector_name');
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 13,324 | 8,888 | -33% | 1 | 1 | 0% | 2,686 | 10,075 | +275% | 0 | 0 | — |
case-02 | fail→pass | 16,991 | 9,455 | -44% | 1 | 1 | 0% | 3,507 | 10,530 | +200% | 0 | 0 | — |
case-24 | fail→pass | 5,843 | 2,668 | -54% | 1 | 1 | 0% | 1,001 | 8,953 | +794% | 0 | 0 | — |
case-03 | fail→pass | 7,027 | 5,479 | -22% | 1 | 1 | 0% | 1,429 | 9,710 | +579% | 0 | 0 | — |
case-04 | pass→pass | 7,010 | 7,780 | +11% | 1 | 1 | 0% | 1,408 | 9,951 | +607% | 0 | 0 | — |
case-05 | fail→pass | 4,499 | 5,286 | +17% | 1 | 1 | 0% | 930 | 9,611 | +933% | 0 | 0 | — |
case-06 | pass→pass | 5,049 | 13,408 | +166% | 1 | 1 | 0% | 1,006 | 9,190 | +814% | 0 | 0 | — |
case-07 | pass→pass | 7,576 | 5,014 | -34% | 1 | 1 | 0% | 1,456 | 9,483 | +551% | 0 | 0 | — |
case-08 | pass→pass | 11,549 | 4,826 | -58% | 1 | 1 | 0% | 2,311 | 9,444 | +309% | 0 | 0 | — |
case-09 | fail→pass | 11,569 | 15,073 | +30% | 1 | 1 | 0% | 2,286 | 9,283 | +306% | 0 | 0 | — |
case-10 | pass→pass | 6,487 | 3,414 | -47% | 1 | 1 | 0% | 1,201 | 9,096 | +657% | 0 | 0 | — |
case-11 | fail→pass | 8,160 | 4,393 | -46% | 1 | 1 | 0% | 1,460 | 9,227 | +532% | 0 | 0 | — |
case-12 | fail→pass | 10,474 | 3,852 | -63% | 1 | 1 | 0% | 1,884 | 9,209 | +389% | 0 | 0 | — |
case-13 | fail→pass | 7,073 | 2,822 | -60% | 1 | 1 | 0% | 1,310 | 9,010 | +588% | 0 | 0 | — |
case-14 | fail→pass | 6,354 | 2,937 | -54% | 1 | 1 | 0% | 1,270 | 9,013 | +610% | 0 | 0 | — |
case-15 | fail→pass | 8,364 | 3,581 | -57% | 1 | 1 | 0% | 1,582 | 9,168 | +480% | 0 | 0 | — |
case-16 | fail→pass | 6,075 | 6,302 | +4% | 1 | 1 | 0% | 1,180 | 9,780 | +729% | 0 | 0 | — |
case-17 | fail→pass | 10,098 | 4,591 | -55% | 1 | 1 | 0% | 1,908 | 9,387 | +392% | 0 | 0 | — |
case-18 | fail→pass | 9,268 | 5,184 | -44% | 1 | 1 | 0% | 1,779 | 9,525 | +435% | 0 | 0 | — |
case-19 | fail→pass | 9,592 | 4,237 | -56% | 1 | 1 | 0% | 1,826 | 9,305 | +410% | 0 | 0 | — |
case-20 | fail→pass | 8,682 | 3,694 | -57% | 1 | 1 | 0% | 1,744 | 9,154 | +425% | 0 | 0 | — |
case-21 | fail→pass | 13,734 | 4,645 | -66% | 1 | 1 | 0% | 2,609 | 9,381 | +260% | 0 | 0 | — |
case-22 | fail→pass | 15,212 | 3,868 | -75% | 1 | 1 | 0% | 1,865 | 9,202 | +393% | 0 | 0 | — |
case-23 | pass→pass | 6,302 | 2,195 | -65% | 1 | 1 | 0% | 1,329 | 8,857 | +566% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of +75 percentage points is the difference between those two pass rates over the 24 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.