
Benchling Integration
Wire your coding agent to Benchling’s v2 REST API so lab and biotech apps can list and manage DNA sequences and other registry objects in your tenant.
Overview
Benchling Integration is an agent skill for the Build phase that teaches correct Benchling REST API v2 authentication, URLs, and pagination for tenant-scoped integrations.
Install
npx skills add https://github.com/k-dense-ai/scientific-agent-skills --skill benchling-integrationWhat is this skill?
- Documents Benchling API v2 base URL tenant pattern and stability expectations
- Covers API key Basic Auth and OAuth Bearer authentication with curl examples
- Standard single-resource and paginated list JSON response shapes
- Pagination via pageSize (max 100) and nextToken for list endpoints
- Common Authorization, Content-Type, and Accept headers for JSON calls
- API version v2 in URL path
- Default pageSize 50, max 100 for list endpoints
Adoption & trust: 519 installs on skills.sh; 27.6k GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You need to call Benchling from your app or agent but lack a concise, copy-safe pattern for tenant URLs, auth headers, and paginated list responses.
Who is it for?
Indie developers building biotech, lab-ops, or registry automation that must integrate with an existing Benchling tenant.
Skip if: Teams with no Benchling account, purely local science tooling with no ELN/API requirement, or workflows that only need generic HTTP tutorials.
When should I use this skill?
Implementing or debugging HTTP clients against a Benchling tenant’s v2 API.
What do I get? / Deliverables
Your agent can emit valid v2 requests and parse Benchling JSON list and resource shapes without re-reading full platform docs from scratch.
- Correct v2 request templates
- Pagination handling for list endpoints
Recommended Skills
Journey fit
Canonical shelf is Build because the skill is a live HTTP integration reference, not discovery or launch work. Integrations subphase fits third-party SaaS API auth, pagination, and endpoint patterns your agent implements in code.
How it compares
Use as a focused Benchling v2 primer instead of dumping the entire Benchling documentation into chat.
Common Questions / FAQ
Who is benchling-integration for?
Solo and indie builders shipping integrations against Benchling’s API—automation scripts, internal dashboards, or agent-driven codegen for lab data.
When should I use benchling-integration?
During Build when wiring REST clients, curl probes, or pagination for DNA sequences and other v2 list endpoints in your tenant.
Is benchling-integration safe to install?
Review the Security Audits panel on this Prism page and treat any API keys or OAuth tokens as secrets; the skill describes network calls to your tenant only.
SKILL.md
READMESKILL.md - Benchling Integration
# Benchling REST API Endpoints Reference ## Base URL All API requests use the base URL format: ``` https://{tenant}.benchling.com/api/v2 ``` Replace `{tenant}` with your Benchling tenant name. ## API Versioning Current API version: `v2` The API version is specified in the URL path. Stable endpoints follow [Benchling stability guidelines](https://docs.benchling.com/docs/stability); `alpha` and `beta` endpoints may change with shorter notice. ## Authentication All requests require authentication via HTTP headers: **API Key (Basic Auth):** ```bash curl -X GET \ https://your-tenant.benchling.com/api/v2/dna-sequences \ -u "your_api_key:" ``` **OAuth Bearer Token:** ```bash curl -X GET \ https://your-tenant.benchling.com/api/v2/dna-sequences \ -H "Authorization: Bearer your_access_token" ``` ## Common Headers ``` Authorization: Bearer {token} Content-Type: application/json Accept: application/json ``` ## Response Format All responses follow a consistent JSON structure: **Single Resource:** ```json { "id": "seq_abc123", "name": "My Sequence", "bases": "ATCGATCG", ... } ``` **List Response:** ```json { "results": [ {"id": "seq_1", "name": "Sequence 1"}, {"id": "seq_2", "name": "Sequence 2"} ], "nextToken": "token_for_next_page" } ``` ## Pagination List endpoints support pagination: **Query Parameters:** - `pageSize`: Number of items per page (default: 50, max: 100) - `nextToken`: Token from previous response for next page **Example:** ```bash curl -X GET \ "https://your-tenant.benchling.com/api/v2/dna-sequences?pageSize=50&nextToken=abc123" ``` ## Error Responses **Format:** ```json { "error": { "type": "NotFoundError", "message": "DNA sequence not found", "userMessage": "The requested sequence does not exist or you don't have access" } } ``` **Common Status Codes:** - `200 OK`: Success - `201 Created`: Resource created - `400 Bad Request`: Invalid parameters - `401 Unauthorized`: Missing or invalid credentials - `403 Forbidden`: Insufficient permissions - `404 Not Found`: Resource doesn't exist - `422 Unprocessable Entity`: Validation error - `429 Too Many Requests`: Rate limit exceeded - `500 Internal Server Error`: Server error ## Core Endpoints ### DNA Sequences **List DNA Sequences:** ```http GET /api/v2/dna-sequences Query Parameters: - pageSize: integer (default: 50, max: 100) - nextToken: string - folderId: string - schemaId: string - name: string (filter by name) - modifiedAt: string (ISO 8601 date) ``` **Get DNA Sequence:** ```http GET /api/v2/dna-sequences/{sequenceId} ``` **Create DNA Sequence:** ```http POST /api/v2/dna-sequences Body: { "name": "My Plasmid", "bases": "ATCGATCG", "isCircular": true, "folderId": "fld_abc123", "schemaId": "ts_abc123", "fields": { "gene_name": {"value": "GFP"}, "resistance": {"value": "Kanamycin"} }, "entityRegistryId": "src_abc123", // optional for registration "namingStrategy": "NEW_IDS" // optional for registration } ``` **Update DNA Sequence:** ```http PATCH /api/v2/dna-sequences/{sequenceId} Body: { "name": "Updated Plasmid", "fields": { "gene_name": {"value": "mCherry"} } } ``` **Archive DNA Sequence:** ```http POST /api/v2/dna-sequences:archive Body: { "dnaSequenceIds": ["seq_abc123"], "reason": "Deprecated construct" } ``` ### RNA Sequences **List RNA Sequences:** ```http GET /api/v2/rna-sequences ``` **Get RNA Sequence:** ```http GET /api/v2/rna-sequences/{sequenceId} ``` **Create RNA Sequence:** ```http POST /api/v2/rna-sequences Body: { "name": "gRNA-001", "bases": "AUCGAUCG", "folderId": "fld_abc123", "fields": { "target_gene": {"value": "TP53"} } } ``` **Update RNA Sequence:** ```http PATCH /api/v2/rna-sequences/{sequenceId} ``` **Archive RNA Sequence:** ```http POST /api/v2/rna-sequences:archive ``` ### Amino Acid (Protein) Sequences **List AA Sequences:** ```http GET /api/v2/aa-sequences ``` **Get AA Sequence:** ```http GET /