Agent skill

API Testing

by idavidov13 in idavidov13/agentic-playwright

API testing patterns for Playwright -- apiRequest fixture usage, Zod response schema creation and validation, test.step wrapping for multi-call tests, per-field negative/validation testing, path…

MITAuto-check passedTesting & QA

Install API Testing

skills CLI
$ npx skills add idavidov13/agentic-playwright --skill api-testing -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install idavidov13/agentic-playwright api-testing --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/idavidov13/agentic-playwright.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/api-testing .claude/skills/api-testing && rm -rf skills-src

Use ~/.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/

Facts

Skill name
api-testing
GitHub stars
223
Token cost
~5.7k tokens
SKILL.md length
1,900 words
Files
6 (incl. references)
Skills in repo
13
Repo updated
First seen
Licence
MIT

At a glance

API testing patterns for Playwright -- apiRequest fixture usage, Zod response schema creation and validation, test.step wrapping for multi-call tests, per-field negative/validation testing, path…

  • Works in 8 steps: Source the contract (documentation… → Define the Zod schema and TypeScript type → Write the test using the apiRequest… → …
  • Updating API test specs
  • SKILL.md covers Critical, Instructions, API Architecture and See Also
  • Needs ACCESS_TOKEN and APP_PASSWORD

What it does

API Testing is an agent skill from idavidov13/agentic-playwright. API testing patterns for Playwright -- apiRequest fixture usage, Zod response schema creation and validation, test.step wrapping for multi-call tests, per-field negative/validation testing, path parameter fuzzing, and helper fixtures for shared setup/teardown. Use when writing or updating API test specs, adding tests for a new endpoint, creating Zod schemas for responses, wiring apiRequest or helper fixtures, or investigating API behavior mismatches vs the OpenAPI spec. Do NOT use for UI selectors (use the…

Its SKILL.md is about 5.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including reference files (for example `references/examples.md`, `references/helper-fixture-example.md` and `references/negative-testing.md`).

It sits in Testing & QA, covering API testing, OpenAPI specifications and Forms and validation. It works with Zod, Playwright and OpenAPI. The repository describes itself as: Production-grade Playwright + TypeScript Scaffold for Agentic Testing. Harness for all major AI coding agents baked in. The licence is MIT.

When your agent uses it

  • Updating API test specs
  • Adding tests for a new endpoint
  • Creating Zod schemas for responses
  • Wiring apiRequest

Example prompts

  • “/api-testing”

Requirements

  • A credential in ACCESS_TOKEN

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. Source the contract (documentation first, exploration only as fallback)
  2. Define the Zod schema and TypeScript type
  3. Write the test using the apiRequest fixture
  4. Wrap multi-call tests in test.step
  5. Cover the full status-code matrix
  6. Add per-field negative / validation coverage
  7. Handle behavior mismatches
  8. (When needed) Promote to a helper fixture

What it can do on your machine

Read from SKILL.md and the folder at commit f6cbf35. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • ACCESS_TOKEN
    • APP_PASSWORD

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

API Testing loads about 5.7k tokens when it runs, and up to ~10k if it reads all its reference files. Until then it costs about 165 tokens; SKILL.md has 1,900 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~165
When it runs · the whole SKILL.md, loaded when a task matches
~5.7k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~10k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from idavidov13/agentic-playwright at commit f6cbf35, republished under its MIT licence (© idavidov13). 1,900 words, ~5,669 tokens.

Download SKILL.mdSave it as .claude/skills/api-testing/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.
name
api-testing
description
API testing patterns for Playwright -- apiRequest fixture usage, Zod response schema creation and validation, test.step wrapping for multi-call tests, per-field negative/validation testing, path parameter fuzzing, and helper fixtures for shared setup/teardown. Use when writing or updating API test specs, adding tests for a new endpoint, creating Zod schemas for responses, wiring apiRequest or helper fixtures, or investigating API behavior mismatches vs the OpenAPI spec. Do NOT use for UI selectors (use the page-objects or selectors skill) or for generic Playwright fixture authoring unrelated to API setup/teardown (use the fixtures skill).
author
Ivan Davidov

API Testing

Critical

These rules are non-negotiable. Violating any of them breaks the scaffold's contract.

  • NEVER hardcode API URLs, access tokens, emails, passwords, or endpoint paths. The only allowed sources of truth are process.env.* (for URLs and credentials) and the enums/{area}/* enums (for endpoint paths, e.g. ApiEndpoints.LOGIN).
  • ALWAYS validate API response bodies with Zod using the exact assertion pattern expect(SchemaName.parse(body)).toBeTruthy();. Type generics alone are not enough, and schema.parse(body) without the expect(...).toBeTruthy() wrapper is not enough.
  • ALWAYS wrap each API call in test.step() when a test contains more than one API call.
  • NEVER silently drop a test because the API misbehaves. Write the test as the spec says, wrap it in test.skip, and add a // FIXME: <ticket-url> comment.
  • NEVER stop at {} empty-body validation. Every request-body endpoint requires per-field omission and per-field invalid-type tests.
  • ALWAYS fuzz path parameters with the invalid-format data-driven loop — regardless of whether OpenAPI mentions it.
  • ALWAYS use the apiRequest fixture directly in tests. Only promote to a helper fixture when the same setup/teardown is reused across 3+ test files.

Instructions

Phase 1: Source the contract (documentation first, exploration only as fallback)

The API contract — not observed behavior — is the source of truth for schemas and tests.

  1. If OpenAPI / Swagger / equivalent documentation exists (the normal case):

    • Build schemas and tests strictly from the documented contract: field names, types, required vs optional, nullability, status codes, error shapes.
    • Do NOT curl the endpoint first to "see what it returns" and then write schemas that match reality.
    • If, during test execution, the actual response disagrees with the documentation (missing field, wrong type, wrong status code, extra field), that is a bug to report, not a reason to loosen the schema. Handle it via Phase 7 (test.skip + // FIXME: <ticket-url>).
  2. Only if no documentation is provided (legacy endpoint, undocumented service, etc.):

    • Make a real request to discover actual response structure, field names, data types, optional vs required fields, nested objects/arrays, and error response formats.
    • Capture the findings and treat them as the working contract for this skill's remaining phases.
    • Flag the missing documentation back to the team — running tests against "whatever the API currently does" is a stopgap, not a target state.
Phase 2: Define the Zod schema and TypeScript type

Schemas live under fixtures/api/schemas/.

{area} is a placeholder. Run ls fixtures/api/schemas/ to discover the real subdirectory names in this repo (e.g., front-office, back-office) and use those instead.

fixtures/api/schemas/
├── {area}/         ← App-specific response/request schemas
│   └── userSchema.ts
└── util/           ← Shared error response schemas
    └── errorResponseSchema.ts

Build the schema directly from the OpenAPI / Swagger contract — including the response envelope (success / message / data / errors or whatever the spec describes). Spell every field out per endpoint; do not invent a factory helper. If the same envelope repeats across many endpoints in one domain, extract a per-domain _envelope.ts (z.strictObject) and compose via .extend(...) — only after the repetition is real:

typescript
// fixtures/api/schemas/{area}/productSchema.ts
import { z } from 'zod/v4';
import type { output as zOutput } from 'zod/v4';

export const ProductSchema = z.strictObject({
    id: z.uuid(),
    name: z.string().min(1),
    price: z.number().positive(),
    category: z.enum(['electronics', 'clothing', 'food']),
    inStock: z.boolean(),
});

// Response envelope is spelled out per the OpenAPI contract -- 1:1 mirror.
export const CreateProductResponseSchema = z.strictObject({
    success: z.boolean(),
    message: z.string(),
    data: ProductSchema,
    errors: z.unknown().nullable(),
});

export type Product = zOutput<typeof ProductSchema>;
export type CreateProductResponse = zOutput<typeof CreateProductResponseSchema>;

Error response schemas already exist in fixtures/api/schemas/util/errorResponseSchema.ts:

  • BadRequestResponseSchema (400)
  • UnauthorizedResponseSchema (401)
  • ForbiddenResponseSchema (403)
  • NotFoundResponseSchema (404)
typescript
import {
    UnauthorizedResponse,
    UnauthorizedResponseSchema,
} from '../../../fixtures/api/schemas/util/errorResponseSchema';

const { status, body } = await apiRequest<UnauthorizedResponse>({
    method: 'POST',
    url: '/api/login',
    baseUrl: process.env.API_URL,
    body: { email: 'bad@email.com', password: 'wrong' },
});

expect(status).toBe(401);
expect(UnauthorizedResponseSchema.parse(body)).toBeTruthy();

For 401 and 403 responses that return a null body, assert expect(body).toBeNull() directly — no schema needed.

Phase 3: Write the test using the apiRequest fixture

Use the apiRequest fixture for all API calls in tests. It provides type-safe requests with automatic response parsing via Playwright's dependency injection:

typescript
import { expect, test } from '../../../fixtures/pom/test-options';
import {
    UserResponse,
    UserResponseSchema,
} from '../../../fixtures/api/schemas/app/userSchema';

test('should return user data', { tag: '@api' }, async ({ apiRequest }) => {
    const { status, body } = await apiRequest<UserResponse>({
        method: 'GET',
        url: '/api/users/me',
        baseUrl: process.env.API_URL,
        headers: process.env.ACCESS_TOKEN,
    });

    expect(status).toBe(200);
    expect(UserResponseSchema.parse(body)).toBeTruthy();
});

Use the apiRequest fixture directly for all API work in tests — assertions, setup calls in beforeEach, teardown calls in afterEach, and one-off requests. Do not create a separate helper fixture for every endpoint.

Request parameters:

OptionTypeRequiredDescription
method'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'YesHTTP method
urlstringYesEndpoint path
baseUrlstringNoBase URL to prepend
bodyRecord<string, unknown>NoRequest payload
headersstringNoAuth token for Authorization header
authType'Bearer' | 'Token' | 'Basic'NoAuth scheme (default: 'Bearer')

Response validation — combine compile-time and runtime safety:

typescript
const { status, body } = await apiRequest<UserResponse>({ ... });

expect(UserResponseSchema.parse(body)).toBeTruthy();

The generic <UserResponse> gives you compile-time type safety on body, while UserResponseSchema.parse() gives you runtime validation. Always use both.

Credentials and URLs — pull from env, never inline:

typescript
// CORRECT
baseUrl: process.env.API_URL,
headers: process.env.ACCESS_TOKEN,
body: { email: process.env.APP_EMAIL, password: process.env.APP_PASSWORD },

// FORBIDDEN
baseUrl: 'https://api.example.com',
headers: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',

Use enums for endpoint paths:

typescript
import { ApiEndpoints } from '../../../enums/app/app';

url: ApiEndpoints.LOGIN,
Phase 4: Wrap multi-call tests in test.step

MANDATORY: When a test contains more than one API call, each call MUST be wrapped in a dedicated test.step() with:

  1. A descriptive name indicating the API operation
  2. Proper validation based on the context (status code, schema, specific fields)

This improves:

  • Readability — Clear flow of API operations
  • Reporting — Detailed step-by-step execution traces
  • Debugging — Pinpoint which API call failed

Correct pattern:

typescript
test(
    'should create and verify user workflow',
    { tag: '@api' },
    async ({ apiRequest }) => {
        const userData = generateUser();
        let userId: string;

        await test.step('Create user via POST /api/users', async () => {
            const { status, body } = await apiRequest<UserResponse>({
                method: 'POST',
                url: '/api/users',
                baseUrl: process.env.API_URL,
                headers: process.env.ACCESS_TOKEN,
                body: userData,
            });

            expect(status).toBe(201);
            expect(UserResponseSchema.parse(body)).toBeTruthy();
            userId = body.id;
        });

        await test.step('Retrieve user via GET /api/users/:id', async () => {
            const { status, body } = await apiRequest<UserResponse>({
                method: 'GET',
                url: `/api/users/${userId}`,
                baseUrl: process.env.API_URL,
                headers: process.env.ACCESS_TOKEN,
            });

            expect(status).toBe(200);
            expect(UserResponseSchema.parse(body)).toBeTruthy();
            expect(body.id).toBe(userId);
            expect(body.email).toBe(userData.email);
        });

        await test.step('Delete user via DELETE /api/users/:id', async () => {
            const { status, body } = await apiRequest<null>({
                method: 'DELETE',
                url: `/api/users/${userId}`,
                baseUrl: process.env.API_URL,
                headers: process.env.ACCESS_TOKEN,
            });

            expect(status).toBe(204);
            expect(body).toBeNull();
        });
    }
);

Forbidden pattern: multiple API calls inside a single test body without test.step wrappers — the trace shows one big test, debugging which call failed requires reading the assertions, and reporting can't surface create-vs-get-vs-delete structure. For the full anti-pattern code block see references/test-step-patterns.md.

Single API call exception: If a test contains only one API call, test.step is optional but recommended for consistency.

Phase 5: Cover the full status-code matrix

For every endpoint × HTTP method combination, tests MUST cover every status code listed in the OpenAPI spec plus the baseline scenarios below. If the OpenAPI spec lists a status code not in this table, it still requires a test.

ScenarioStatusWhat to assert
Happy path (valid auth + valid body)200/201Schema parse passes + key fields match sent data
Missing Authorization header401status === 401, validate body with schema or expect(body).toBeNull()
Insufficient permissions (wrong-role token)403status === 403, validate body with schema or expect(body).toBeNull()
Empty body (for POST/PUT/PATCH)400/422Error schema parse passes — single test with {} body
Each required field omitted individually400/422One test per field via destructure + rest — see Phase 6
Each field with type-inappropriate values400/422for...of loop per field — see Phase 6
Non-existent resource ID404status === 404 (use test.skip with // FIXME comment if backend bug exists)
Invalid path parameter formats404Data-driven loop: numeric string, boolean-like, special chars, injection attempts
Unsupported HTTP method405At least one test with a method the endpoint does not support
Conflict (if listed in OpenAPI)409Test the conflicting condition or test.skip with // FIXME if not reproducible
Validation errors (if listed in OpenAPI)422Covered by per-field validation tests above
No content (for DELETE)204status === 204, expect(body).toBeNull()

Structure: One test.describe per HTTP method + path. Use beforeAll/afterAll (not beforeEach/afterEach) to create/delete shared resources needed by multiple tests in the same describe block.

Key conventions from real tests:

  • Auth tokens: process.env.ACCESS_TOKEN (full permissions), process.env.ACCESS_TOKEN_ZERO (zero permissions)
  • Config: process.env.API_URL + /api/X — never bare process.env.API_URL
  • Cleanup: afterAll in POST describes (holds resourceId from the happy-path test); afterAll in GET/PUT/DELETE describes (resource created in beforeAll)
  • When a test.skip is needed due to a backend bug: add // FIXME: <ticket-url> comment + /* eslint-disable playwright/no-skipped-test */ above it
  • Tag: @api for API tests (check real tag in existing spec files for other areas)
Show full SKILL.md (821 more words)Show less
Phase 6: Add per-field negative / validation coverage

Testing only with an empty body ({}) is never sufficient. Every endpoint that accepts a request body (POST, PUT, PATCH) requires systematic per-field validation testing.

Coverage checklist for endpoints with a body:

  1. Empty body — single test sending {}
  2. Each required field omitted — one test per field, omitting only that field while keeping all others valid
  3. Each field with type-inappropriate values — for...of loop per field using contextually appropriate invalid values
  4. Boundary values where applicable (empty string for min-length, negative for positive-only numbers, past dates for future-only, etc.)

Universal invalid arrays live as as const exports in test-data/static/util/invalid-values.ts — INVALID_STRING_VALUES, INVALID_UUID_VALUES, INVALID_NUMBER_VALUES, INVALID_BOOLEAN_VALUES, INVALID_ENUM_VALUES, INVALID_ARRAY_VALUES, INVALID_OBJECT_VALUES. Always import; never redefine inline.

Patterns to use (full code in references/negative-testing.md):

  • for...of spread-and-override — base valid payload, override one field at a time with INVALID_* values, assert 400 + BadRequestResponseSchema.parse(body).
  • Omitting required fields — destructure + rest (const { [field]: _, ...rest } = validPayload) per required field.
  • Path-parameter validation — data-driven loop over [{ description, value }] with numeric strings, boolean-likes, special chars, injection attempts. Mandatory regardless of OpenAPI mention.

Three-tier rule for where invalid-value arrays live:

  1. Universal type-mismatch arrays → test-data/static/util/invalid-values.ts (INVALID_* as const tuples). Import; never redefine.
  2. Domain-specific curated invalid sets (invalid emails, weak passwords, forbidden categories) → test-data/static/{area}/*.ts (as const). Import; never inline. Never .json.
  3. Field-specific boundary / range values used in exactly one field → inline in the spec. Promote to static data only when reused across 2+ fields or spec files.

A typical validation describe combines tier 1 and tier 3 in separate for...of loops. For full code blocks, the INVALID_* constants table, and the email-field type-vs-format combination rule, see references/negative-testing.md.

Forbidden: empty-body-only validation. A single body: {} test asserting 400 is not sufficient. Per-field omission and per-field invalid-type loops are mandatory. Full anti-pattern in references/test-step-patterns.md.

Phase 7: Handle behavior mismatches

When the API's actual behavior differs from the OpenAPI spec or from the expected status code in the Phase 5 coverage matrix:

  1. NEVER silently drop the test. The test must exist in the file.
  2. Write the test as the spec says it should work (expected status code and schema).
  3. Wrap it with test.skip and add a // FIXME: comment explaining the discrepancy:
typescript
/* eslint-disable playwright/no-skipped-test */
// FIXME: API returns 500 instead of 422 for invalid price on PUT. Backend bug.
test.skip(
    'should return 422 when price is a non-numeric string',
    { tag: '@api' },
    async ({ apiRequest }) => {
        // ... test body as it SHOULD work per spec ...
    }
);
  1. Never adjust the expected status code to match buggy behavior. The test documents the contract, not the current bug.
  2. If the API returns a different valid status code than the spec (e.g., 422 instead of 400), use the actual status code and add a comment noting the spec discrepancy.
Phase 8: (When needed) Promote to a helper fixture

For critical, recurring setup/teardown operations that multiple tests depend on (e.g., creating a user account that several test files need as a precondition, or seeding complex data that must be cleaned up), use helper fixtures in fixtures/helper/helper-fixture.ts.

Helper fixtures wrap the apiRequest plain function with Playwright's fixture lifecycle: setup before await use(...), yield via use(data), teardown after — runs even if the test fails. For the full code pattern see references/helper-fixture-example.md.

When to use apiRequest fixture vs. helper fixture:

ApproachUse CaseExample
apiRequest fixture (primary)All API calls in tests — assertions, beforeEach/afterEach, one-off callsValidate status codes, response schemas, teardown in hooks
Helper fixture (important ops only)Critical setup/teardown reused across many test files with guaranteed lifecycleSeed a user account that 10+ test files depend on
Factory functionGenerate dynamic test data (no API call)generateUser() from test-data/factories/

Rule of thumb: Use apiRequest directly unless you find yourself copy-pasting the same multi-step setup/teardown into 3+ test files.

API Architecture

fixtures/
├── api/
│   ├── api-request-fixture.ts    ← Playwright fixture providing apiRequest (used in tests via DI)
│   ├── plain-function.ts         ← Core HTTP function (internal implementation, used by fixture and helpers)
│   ├── api-types.ts              ← TypeScript types (ApiRequestParams, ApiRequestResponse, etc.)
│   └── schemas/                  ← Zod schemas for validation
│       ├── app/                  ← App-specific schemas
│       └── util/                 ← Shared error response schemas
└── helper/
    └── helper-fixture.ts         ← Setup/teardown fixtures for important recurring operations
  • api-request-fixture.ts — Playwright fixture wrapping the plain function. Provides apiRequest via DI with generics for type-safe responses. Primary tool for API calls in tests.
  • plain-function.ts — Core HTTP function. Handles method routing, auth headers, response parsing. Used internally by the fixture and by helper fixtures.
  • api-types.ts — Shared types: ApiRequestParams, ApiRequestResponse<T>, ApiRequestFn.
  • helper-fixture.ts — Setup/teardown fixtures for important, recurring preconditions. Uses plain-function.ts internally.

See Also

  • type-safety skill — Zod 4 schemas, z.strictObject(), the mandatory expect(SchemaName.parse(body)).toBeTruthy(); pattern, zOutput / zInput inference.
  • data-strategy skill — Faker + Zod factories for happy-path payloads, the three-tier rule for negative testing (universal INVALID_* arrays + domain-specific sets + inline boundary values).
  • enums skill — ApiEndpoints.* for endpoint paths and error message constants used in assertions.
  • fixtures skill — the apiRequest fixture itself, helper fixtures for setup/teardown, and the 3+ files rule of thumb for promotion (Phase 8).
  • helpers skill — auth bootstrap (createAppStorageState, setUserAccessToken) that publishes process.env.ACCESS_TOKEN consumed by API tests.
  • test-standards skill — @api tag, test.step requirements for multi-call tests, single-tag rule.
  • refactor-values skill — when an endpoint enum value or a Zod literal needs to change, the impact-analysis workflow.
  • references/examples.md — three end-to-end walkthroughs (new endpoint, multi-step workflow, validation lockdown).
  • references/troubleshooting.md — common API-testing pitfalls (ZodError, 401/null body, status-code drift, empty-body-only coverage, hardcoded URLs/tokens).
  • references/negative-testing.md — full Phase 6 code blocks (per-field invalid-type, omitting required fields, path-parameter validation), the INVALID_* constants table, and the three-tier rule.
  • references/test-step-patterns.md — full anti-pattern code blocks for Phase 4 (multi-call without test.step) and Phase 6 (empty-body-only validation).
  • references/helper-fixture-example.md — full lifecycle-wired helper-fixture code pattern from Phase 8.

© idavidov13, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 5 other files (references) in .claude/skills/api-testing of idavidov13/agentic-playwright.

  • SKILL.md
  • references/examples.md
  • references/helper-fixture-example.md
  • references/negative-testing.md
  • references/test-step-patterns.md
  • references/troubleshooting.md

Open the folder on GitHubat commit f6cbf35

Compare with similar skills

API Testing 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.

API Testing compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
API Testing this skillidavidov13/agentic-playwright223—~5.7kAutomated safety check: PassMIT
API Testingpetrkindlmann/qa-skills163—~2.7kAutomated safety check: PassMIT
API Testingfugazi/test-automation-skills-agents247—~1.5kAutomated safety check: PassMIT
Zodjasonjgardner/blockbench-mcp-plugin4883 repos~1.4kAutomated safety check: PassGPL-3.0
REST API Designcuriositech/some_claude_skills2431 repos~3.1kAutomated safety check: PassMIT
Manage Dashboard WidgetsPostHog/posthog-foss721—~2.3kAutomated safety check: PassMIT

Similar skills

  • API Testing

    petrkindlmann/qa-skills

    Test REST and GraphQL APIs with Playwright APIRequestContext, Supertest, or standalone HTTP clients.

    163 GitHub stars~2.7k tokensUpdated 3 mo ago
    Testing & QAAuto-check passed
  • API Testing

    fugazi/test-automation-skills-agents

    Test REST and GraphQL endpoint contracts using Playwright request fixture (TypeScript) or REST Assured (Java).

    247 GitHub stars~1.5k tokensUpdated 4 days ago
    Testing & QAAuto-check passed
  • Zod

    jasonjgardner/blockbench-mcp-plugin

    Zod schema validation best practices for type safety, parsing, and error handling.

    488 GitHub starsUsed in 3 repos~1.4k tokens
    DevelopmentAuto-check passed
  • REST API Design

    curiositech/some_claude_skills

    Design REST API endpoints with Zod validation and OpenAPI documentation.

    243 GitHub starsUsed in 1 repo~3.1k tokens
    Backend & APIsAuto-check passed
  • Manage Dashboard Widgets

    PostHog/posthog-foss

    Official

    Guides PostHog engineers through dashboard widget platform work — ship a new widgettype (WIDGETREGISTRY, catalog, runwidgets, WidgetCard) or update a shipped type (config, query, layout, RBAC, tile…

    721 GitHub stars~2.3k tokensUpdated today
    Backend & APIsAuto-check passed
  • Minimal starter runbook for cloud agents to install dependencies, run packages, execute tests, and troubleshoot the Scalar monorepo quickly.

    16k GitHub stars~1.4k tokensUpdated today
    Testing & QAAuto-check passed

More from idavidov13/agentic-playwright

All 13 skills in this repo
  • AI Native Workflow

    idavidov13/agentic-playwright

    Sole entry-point router for AI-assisted work on this Playwright scaffold — owns the 8-phase main workflow (classify → route → explore → plan+confidence → human gate → apply → verify → report), the…

    223 GitHub stars~3.5k tokensUpdated 6 days ago
    Auto-check passed
  • Common Tasks

    idavidov13/agentic-playwright

    Copy-paste AI prompt templates for common Playwright scaffold development tasks — adding page objects, functional/E2E/API tests, Zod schemas, factories, fixtures, and components.

    223 GitHub stars~2.5k tokensUpdated 6 days ago
    Auto-check passed
  • Data Strategy

    idavidov13/agentic-playwright

    Test data strategy for the Playwright scaffold — Faker + Zod factories for dynamic happy-path data, static TS files (.ts with as const exports — never .json) for domain-specific curated invalid…

    223 GitHub stars~3.4k tokensUpdated 6 days ago
    Auto-check passed
  • Page Objects

    idavidov13/agentic-playwright

    Page Object Model pattern for the Playwright scaffold — class structure, get-accessor locator pattern, action-method conventions, component composition, registration via the page-object fixture, and…

    223 GitHub stars~3.6k tokensUpdated 6 days ago
    Auto-check passed
  • Selectors

    idavidov13/agentic-playwright

    Selector strategy, exploration-first workflow, locator priority order (getByRole then getByLabel then getByPlaceholder then getByText then getByTestId), and feedback/validation-message selector…

    223 GitHub stars~2.7k tokensUpdated 6 days ago
    Auto-check passed
  • Test Standards

    idavidov13/agentic-playwright

    Spec file conventions for the Playwright scaffold — imports from test-options.ts, test file structure (describe / beforeEach / test / test.step), single-tag rule, functional vs E2E vs API vs setup…

    223 GitHub stars~3.9k tokensUpdated 6 days ago
    Auto-check passed

Categories

Questions about API Testing

What does API Testing do?

API testing patterns for Playwright -- apiRequest fixture usage, Zod response schema creation and validation, test.step wrapping for multi-call tests, per-field negative/validation testing, path…. API Testing is an agent skill from idavidov13/agentic-playwright.step wrapping for multi-call tests, per-field negative/validation testing, path parameter fuzzing, and helper fixtures for shared setup/teardown.

When should I use API Testing?

API Testing fits situations like: updating API test specs; adding tests for a new endpoint; creating Zod schemas for responses; wiring apiRequest.

How do I install API Testing in Claude Code?

Run `npx skills add idavidov13/agentic-playwright --skill api-testing -a claude-code`. Or copy the skill folder (.claude/skills/api-testing in idavidov13/agentic-playwright) into .claude/skills/api-testing in your project. Claude Code loads it when a task matches its description.

How do I install API Testing in Codex?

Run `npx skills add idavidov13/agentic-playwright --skill api-testing -a codex`. Or copy the skill folder (.claude/skills/api-testing in idavidov13/agentic-playwright) into .agents/skills/api-testing in your project. Codex loads it when a task matches its description.

Can I use API Testing in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add idavidov13/agentic-playwright --skill api-testing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/api-testing, .gemini/skills/api-testing, .github/skills/api-testing and .opencode/skills/api-testing in your project.

What does API Testing need to run?

Going by SKILL.md and its folder, API Testing needs credentials named ACCESS_TOKEN and APP_PASSWORD. Our summary lists: A credential in ACCESS_TOKEN.

Does API Testing access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is API Testing safe to install?

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.

What licence does API Testing use?

API Testing is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does API Testing use?

About 5.7k tokens (SKILL.md is roughly 23k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 4.7k tokens, read only when the agent opens those files.

What are the alternatives to API Testing?

Skills that share tags, products or a category with API Testing: API Testing (petrkindlmann/qa-skills, 163 stars), API Testing (fugazi/test-automation-skills-agents, 247 stars), Zod (jasonjgardner/blockbench-mcp-plugin, 488 stars) and REST API Design (curiositech/some_claude_skills, 243 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains API Testing?

idavidov13 (a GitHub user) maintains it in idavidov13/agentic-playwright, which has 223 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 1, 2026.

Source: idavidov13/agentic-playwright on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.