Documentation

API Reference

The Skycore REST API enables programmatic RTL generation and verification runs. API access is offered on Team (beta) and Studio (production) tiers.

API Reference

The Skycore API is an HTTPS REST interface. Requests and responses use JSON. All endpoints use https://api.skycore.dev/v1. Access requires a workspace token issued during provisioning.

Authentication

Send your API token in the Authorization header:

http
Authorization: Bearer sk_<your-workspace-token>

Workspace tokens are organization-scoped. Each team engineer receives an individual token. Do not share tokens between team members. Rotate tokens in the workspace dashboard under Settings > API.

Projects

A project is the top-level organizational unit. It stores EDA environment settings (process node, simulation tool, output language) and groups related blocks and generation runs.

POST /v1/projects

Add a project.

name string Required human-readable project name.
process_node string Process node, e.g. "65nm", "28nm", or "22nm". Required.
output_language string "verilog" or "systemverilog"; default: "systemverilog".
sim_tool string "xcelium", "vcs", or "questa". Used for verification runs.
json Request body
{
  "name": "lna-library-q4",
  "process_node": "65nm",
  "output_language": "systemverilog",
  "sim_tool": "xcelium"
}
json 201 Created
{
  "id": "proj_a1b2c3d4",
  "name": "lna-library-q4",
  "process_node": "65nm",
  "output_language": "systemverilog",
  "sim_tool": "xcelium",
  "created_at": "2026-06-01T09:14:00Z"
}
GET /v1/projects

Return every workspace project in a paginated array.

GET /v1/projects/{project_id}

Fetch one project by ID.

Blocks

A block defines one RF IP block within a project. It contains the description, performance targets, and interface specification. Iteration can attach multiple generation runs to the same block.

POST /v1/projects/{project_id}/blocks

Add a block definition.

name string Required block identifier and Verilog module name prefix.
description string Required natural-language block description, covering type, frequency targets, and performance envelope.
interface object Optional interface override with explicit port names and directions. If omitted, Skycore infers interface from the description.
json Request body
{
  "name": "lna_5g_n77",
  "description": "LNA for 5G NR Band n77, NF < 1.5 dB, IIP3 > 10 dBm, 65 nm CMOS, differential input",
  "interface": {
    "ports": [
      { "name": "rf_inp", "direction": "input", "width": 1 },
      { "name": "rf_inn", "direction": "input", "width": 1 },
      { "name": "rf_outp", "direction": "output", "width": 1 },
      { "name": "gain_ctrl", "direction": "input", "width": 4 }
    ]
  }
}

Generation Runs

A generation run creates RTL output for a block. Each run is versioned and stored with its generation metadata. Runs are asynchronous, so poll status until it reaches completed or failed.

POST /v1/blocks/{block_id}/generation-runs
topology_hint string Optional topology preference, e.g. "cascode" or "common-source". Skycore picks topology when omitted.
output_language string Optional per-run override of the project default.
GET /v1/generation-runs/{run_id}

Check a generation run's status.

json 200 OK
{
  "id": "gen_x9y8z7w6",
  "block_id": "blk_e5f6g7h8",
  "status": "completed",
  "output_language": "systemverilog",
  "topology": "cascode",
  "rtl_url": "https://api.skycore.dev/v1/generation-runs/gen_x9y8z7w6/rtl",
  "created_at": "2026-06-18T14:22:07Z",
  "completed_at": "2026-06-18T14:22:43Z"
}
GET /v1/generation-runs/{run_id}/rtl

Download the RTL output file. Returns raw Verilog or SystemVerilog source as text/plain.

Verification Runs

A verification run links to a generation run and executes the automatically produced UVM testbench against its RTL. It is available only when the parent project has a configured simulation tool.

POST /v1/generation-runs/{run_id}/verification-runs
test_selection array Optional test sequence name list. If omitted, all generated tests run.
pvt_corners array PVT corners, e.g. ["tt_1v_25c", "ss_0v9_m40c", "ff_1v1_125c"]. Nominal corner is default.
GET /v1/verification-runs/{vrun_id}

Check verification status and fetch results.

json 200 OK
{
  "id": "vrun_p1q2r3s4",
  "generation_run_id": "gen_x9y8z7w6",
  "status": "completed",
  "tests_total": 3,
  "tests_passed": 3,
  "tests_failed": 0,
  "results": [
    { "name": "gain_nominal_tb", "status": "pass", "detail": "gain 15.2 dB" },
    { "name": "nf_sweep_tb", "status": "pass", "detail": "NF 1.87 dB" },
    { "name": "iip3_linearity_tb", "status": "pass", "detail": "IIP3 +7.4 dBm" }
  ],
  "report_url": "https://api.skycore.dev/v1/verification-runs/vrun_p1q2r3s4/report"
}

Errors

The API uses standard HTTP status codes. Error responses include a JSON body with code and message fields.

400 Bad Request Invalid or missing request parameters. See the message field for details.
401 Unauthorized API token missing or invalid.
403 Forbidden This endpoint is unavailable on your tier. Review your workspace tier settings.
404 Not Found The referenced resource is absent or belongs to a different organization.
429 Too Many Requests Rate limit hit. See the Retry-After header for the number of seconds to wait.

Rate Limits

Rate limits vary by workspace tier. Generation runs are the primary rate-limited resource.

Team (beta) API 20 generation runs per day, 200 API requests per minute. Verification runs apply to the daily generation quota.
Studio API Unlimited generation runs. 1000 API requests per minute. Priority queue for verification.

For API access questions or quota increase requests, email [email protected].

API access?

Provisioned Team and Studio accounts can use the API. Apply for early access to begin.

Request Early Access