Val Town vals API
These endpoints let you get, create, and run vals.
These endpoints let you get, create, and run vals.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/val-town-vals-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.1.0
info:
title: Val Town alias vals API
description: 'Val Town’s public API
OpenAPI JSON endpoint:
https://api.val.town/openapi.json'
termsOfService: https://www.val.town/termsofuse
version: '1'
servers:
- url: https://api.val.town
description: Production
tags:
- name: vals
description: 'These endpoints
let you get, create, and run vals.'
paths:
/v2/vals/{val_id}:
get:
operationId: valsGet2
tags:
- vals
description: Get a val by id
parameters:
- schema:
type: string
format: uuid
in: path
name: val_id
required: true
description: Id of a val
responses:
'200':
description: A Val
content:
application/json:
schema:
$ref: '#/components/schemas/Val'
delete:
operationId: projectsDelete2
tags:
- vals
description: Delete a project
parameters:
- schema:
type: string
format: uuid
in: path
name: val_id
required: true
description: Id of a val
responses:
'204':
description: Default Response
'404':
description: Project not found
content:
application/json:
schema:
description: Project not found
/v2/vals:
get:
operationId: valsList2
tags:
- vals
description: Lists all vals including all public vals and your unlisted and private vals
parameters:
- schema:
enum:
- public
- unlisted
- private
in: query
name: privacy
required: false
description: This resource's privacy setting. Unlisted resources do not appear on profile pages or elsewhere, but you can link to them.
- schema:
type: string
format: uuid
in: query
name: user_id
required: false
description: User ID to filter by
- schema:
type: string
format: date-time
in: query
name: cursor
required: false
description: Cursor to start the pagination from
- schema:
type: integer
minimum: 1
maximum: 100
default: 20
in: query
name: limit
required: true
description: Maximum items to return in each paginated response
security:
- bearerAuth: []
responses:
'200':
description: A paginated result set
content:
application/json:
schema:
type: object
required:
- data
- links
properties:
data:
type: array
items:
$ref: '#/components/schemas/Val'
links:
$ref: '#/components/schemas/PaginationLinks'
description: A paginated result set
post:
operationId: valsCreate2
tags:
- vals
description: Create a new val
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- name
- privacy
properties:
name:
type: string
minLength: 1
maxLength: 48
pattern: ^[a-zA-Z][a-zA-Z0-9\-_]*$
description:
type: string
maxLength: 64
privacy:
enum:
- public
- unlisted
- private
orgId:
type: string
format: uuid
description: ID of the org to create the val in
description: Val information provided to create a new val
example:
name: myVal
description: My val
privacy: public
description: Val information provided to create a new val
responses:
'201':
description: A Val
content:
application/json:
schema:
$ref: '#/components/schemas/Val'
'409':
description: 'Conflict: Project name already exists'
content:
application/json:
schema:
description: 'Conflict: Project name already exists'
/v2/vals/{val_id}/branches/{branch_id}:
get:
operationId: branchesGet2
tags:
- vals
description: Get a branch by id
parameters:
- schema:
type: string
format: uuid
in: path
name: val_id
required: true
description: Id of a val
- schema:
type: string
format: uuid
in: path
name: branch_id
required: true
description: Id of a branch
responses:
'200':
description: A Branch
content:
application/json:
schema:
$ref: '#/components/schemas/Branch'
delete:
operationId: branchesDelete2
tags:
- vals
description: Delete a branch
parameters:
- schema:
type: string
format: uuid
in: path
name: val_id
required: true
description: Id of a val
- schema:
type: string
format: uuid
in: path
name: branch_id
required: true
description: Id of a branch
responses:
'204':
description: Deleted
'404':
description: Branch not found
content:
application/json:
schema:
description: Branch not found
/v2/vals/{val_id}/branches:
get:
operationId: branchesList2
tags:
- vals
description: List all branches for a val
parameters:
- schema:
type: integer
minimum: 0
default: 0
in: query
name: offset
required: true
description: Number of items to skip in order to deliver paginated results
- schema:
type: integer
minimum: 1
maximum: 100
default: 20
in: query
name: limit
required: true
description: Maximum items to return in each paginated response
- schema:
type: string
format: uuid
in: path
name: val_id
required: true
description: Id of a val
responses:
'200':
description: A paginated result set
content:
application/json:
schema:
type: object
required:
- data
- links
properties:
data:
type: array
items:
$ref: '#/components/schemas/Branch'
links:
$ref: '#/components/schemas/PaginationLinks'
description: A paginated result set
post:
operationId: branchesCreate2
tags:
- vals
description: Create a new branch
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- name
properties:
name:
type: string
minLength: 1
maxLength: 48
pattern: ^[a-zA-Z0-9\$\[\]\(\)\-_.]+$
branchId:
type: string
format: uuid
description: The branch ID to fork from. If this is not specified, the new branch will be forked from main.
description: Branch information provided to create a new project
example:
name: my-branch
branchId: 00000000-0000-0000-0000-000000000000
description: Branch information provided to create a new project
parameters:
- schema:
type: string
format: uuid
in: path
name: val_id
required: true
description: Id of a val
responses:
'201':
description: A Branch
content:
application/json:
schema:
$ref: '#/components/schemas/Branch'
'409':
description: 'Conflict: Branch name already exists in this project'
content:
application/json:
schema:
description: 'Conflict: Branch name already exists in this project'
/v2/vals/{val_id}/files:
get:
operationId: valFilesGet2
tags:
- vals
description: Get metadata for files and directories in a val. If path is an empty string, returns files at the root directory.
parameters:
- schema:
type: integer
minimum: 0
in: query
name: version
required: false
description: Specific branch version to query
- schema:
type: string
format: uuid
in: query
name: branch_id
required: false
description: Id to query
- schema:
type: string
in: query
name: path
required: true
description: Path to a file or directory (e.g. 'dir/subdir/file.ts'). Pass in an empty string to represent the root directory.
- schema:
type: boolean
default: false
in: query
name: recursive
required: true
description: Whether to recursively act on all files in the project
- schema:
type: integer
minimum: 0
default: 0
in: query
name: offset
required: true
description: Number of items to skip in order to deliver paginated results
- schema:
type: integer
minimum: 1
maximum: 100
default: 20
in: query
name: limit
required: true
description: Maximum items to return in each paginated response
- schema:
type: string
format: uuid
in: path
name: val_id
required: true
description: Id of a val
responses:
'200':
description: A paginated result set
content:
application/json:
schema:
type: object
required:
- data
- links
properties:
data:
type: array
items:
$ref: '#/components/schemas/FileRevisionMetadataV2'
links:
$ref: '#/components/schemas/PaginationLinks'
description: A paginated result set
post:
operationId: filesCreate2
tags:
- vals
description: Create a new file, project val or directory
requestBody:
required: true
content:
application/json:
schema:
anyOf:
- type: object
required:
- type
properties:
type:
type: string
enum:
- directory
content:
type: 'null'
- type: object
required:
- content
- type
properties:
content:
type: string
minLength: 0
maxLength: 80000
description: File and val content. An empty string will create an empty file. When creating a directory, the content should be null or undefined.
type:
enum:
- file
- interval
- http
- email
- script
parameters:
- schema:
type: string
format: uuid
in: query
name: branch_id
required: false
description: The specified branch of the resource. Defaults to main if not provided.
- schema:
type: string
in: query
name: path
required: true
description: Path to a file or directory (e.g. 'dir/subdir/file.ts'). Pass in an empty string to represent the root directory.
- schema:
type: string
format: uuid
in: path
name: val_id
required: true
description: Id of a val
responses:
'201':
description: A File or Directory's Metadata
content:
application/json:
schema:
$ref: '#/components/schemas/FileRevisionMetadataV2'
'409':
description: Default Response
content:
application/json:
schema:
type: object
required:
- message
properties:
message:
type: string
description: File or directory already exists at this path
delete:
operationId: filesDelete2
tags:
- vals
description: Deletes a file or a directory. To delete a directory and all of its children, use the recursive flag. To delete all files, pass in an empty path and the recursive flag.
parameters:
- schema:
type: string
format: uuid
in: query
name: branch_id
required: false
description: The specified branch of the resource. Defaults to main if not provided.
- schema:
type: string
in: query
name: path
required: true
description: Path to a file or directory (e.g. 'dir/subdir/file.ts'). Pass in an empty string to represent the root directory.
- schema:
type: boolean
default: false
in: query
name: recursive
required: true
description: Whether to recursively act on all files in the project
- schema:
type: string
format: uuid
in: path
name: val_id
required: true
description: Id of a val
responses:
'204':
description: Default Response
'404':
description: File not found
content:
application/json:
schema:
description: File not found
put:
operationId: fileContentUpdate2
tags:
- vals
description: Update a file's content
requestBody:
required: true
content:
application/json:
schema:
anyOf:
- type: object
properties:
content:
type: string
minLength: 0
maxLength: 80000
description: File and val content. An empty string will create an empty file. When creating a directory, the content should be null or undefined.
type:
enum:
- file
- interval
- http
- email
- script
parent_path:
anyOf:
- type: string
description: Path to the directory you'd like to move this file to (e.g. 'folder1/folder2')
- type: 'null'
name:
type: string
minLength: 1
maxLength: 48
pattern: ^[a-zA-Z0-9\$\[\]\(\)\-_.]+$
parameters:
- schema:
type: string
format: uuid
in: query
name: branch_id
required: false
description: The specified branch of the resource. Defaults to main if not provided.
- schema:
type: string
in: query
name: path
required: true
description: Path to a file or directory (e.g. 'dir/subdir/file.ts'). Pass in an empty string to represent the root directory.
- schema:
type: string
format: uuid
in: path
name: val_id
required: true
description: Id of a val
responses:
'200':
description: A File or Directory's Metadata
content:
application/json:
schema:
$ref: '#/components/schemas/FileRevisionMetadataV2'
'201':
description: A File or Directory's Metadata
content:
application/json:
schema:
$ref: '#/components/schemas/FileRevisionMetadataV2'
/v2/vals/{val_id}/environment_variables:
get:
operationId: valEnvironmentVariablesList
tags:
- vals
description: List environment variables defined in this project. This only includes names, not values.
parameters:
- schema:
type: integer
minimum: 0
default: 0
in: query
name: offset
required: true
description: Number of items to skip in order to deliver paginated results
- schema:
type: integer
minimum: 1
maximum: 100
default: 20
in: query
name: limit
required: true
description: Maximum items to return in each paginated response
- schema:
type: string
format: uuid
in: path
name: val_id
required: true
description: Id of a val
responses:
'200':
description: A paginated result set
content:
application/json:
schema:
type: object
required:
- data
- links
properties:
data:
type: array
items:
$ref: '#/components/schemas/TEnvironmentVariable'
links:
$ref: '#/components/schemas/PaginationLinks'
description: A paginated result set
post:
operationId: valEnvironmentVariablesCreate
tags:
- vals
description: Create a new environment variable scoped to this project.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- value
- key
properties:
value:
type: string
description: Value of the environment variable.
maxLength: 8192
description:
type: string
description: Optional description of the environment variable
maxLength: 1024
key:
type: string
maxLength: 8192
pattern: ^[A-Za-z_][A-Z0-9a-z_]*$
description: Name or key of the environment variable, accessible via Deno.env or process.env
description: Inputs for an environment variable
description: Inputs for an environment variable
parameters:
- schema:
type: string
format: uuid
in: path
name: val_id
required: true
description: Id of a val
responses:
'201':
description: An environment variable
content:
application/json:
schema:
$ref: '#/components/schemas/TEnvironmentVariable'
'409':
description: Key already exists
content:
application/json:
schema:
description: Key already exists
/v2/vals/{val_id}/environment_variables/{key}:
put:
operationId: valEnvironmentVariablesCreate
tags:
- vals
description: Update a environment variable scoped to this project.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- value
properties:
value:
type: string
description: Value of the environment variable.
maxLength: 8192
description:
type: string
description: Optional description of the environment variable
maxLength: 1024
description: Inputs to update a environment variable
description: Inputs to update a environment variable
parameters:
- schema:
type: string
format: uuid
in: path
name: val_id
required: true
description: Id of a val
- schema:
type: string
in: path
name: key
required: true
responses:
'201':
description: An environment variable
content:
application/json:
schema:
$ref: '#/components/schemas/TEnvironmentVariable'
delete:
operationId: valEnvironmentVariablesDelete
tags:
- vals
description: Delete a environment variable scoped to this project.
parameters:
- schema:
type: string
format: uuid
in: path
name: val_id
required: true
description: Id of a val
- schema:
type: string
in: path
name: key
required: true
responses:
'204':
description: Default Response
'404':
description: Environment variable or project not found
content:
application/json:
schema:
description: Environment variable or project not found
/v2/vals/{val_id}/files/content:
get:
operationId: filesContentGet2
tags:
- vals
description: Download file content
parameters:
- schema:
type: integer
minimum: 0
in: query
name: version
required: false
description: Specific branch version to query
- schema:
type: string
format: uuid
in: query
name: branch_id
required: false
description: Id to query
- schema:
type: string
in: query
name: path
required: true
description: Path to a file or directory (e.g. 'dir/subdir/file.ts'). Pass in an empty string to represent the root directory.
- schema:
type: string
format: uuid
in: path
name: val_id
required: true
description: Id of a val
- schema:
type: string
in: header
name: If-Match
required: false
- schema:
type: string
in: header
name: If-Unmodified-Since
required: false
- schema:
type: string
in: header
name: If-None-Match
required: false
- schema:
type: string
in: header
name: If-Modified-Since
required: false
- schema:
type: string
in: header
name: Cache-Control
required: false
responses:
'200':
description: Contents of the file
content:
application/octet-stream:
schema:
type: string
format: string
'304':
description: Cached version of the file is the same as the one requested
content:
application/json:
schema:
description: Cached version of the file is the same as the one requested
'412':
description: Precondition failed
content:
application/json:
schema:
description: Precondition failed
type: string
components:
schemas:
FileRevisionMetadataV2:
type: object
required:
- name
- id
- path
- version
- updatedAt
- type
- links
properties:
name:
type: string
id:
type: string
format: uuid
description: The id of the resource
path:
type: string
version:
type: integer
minimum: 0
updatedAt:
type: string
format: date-time
type:
enum:
- directory
- file
- interval
- http
- email
- script
links:
type: object
required:
- self
- html
- module
properties:
self:
type: string
format: uri
description: The URL of this resource on this API
html:
type: string
format: uri
description: The URL of this resource on Val Town
module:
type: string
format: uri
description: The URL of this resource's source code as a module
endpoint:
type: string
format: uri
description: This resource's web endpoint, where it serves a website or API
email:
type: string
format: email
description: This resource's email address for receiving emails (for email-type vals)
description: A File or Directory's Metadata
Branch:
type: object
required:
- name
- id
- version
- createdAt
- updatedAt
- forkedBranchId
- links
properties:
name:
type: string
id:
type: string
format: uuid
description: The id of the branch
version:
type: integer
minimum: 0
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
forkedBranchId:
anyOf:
- type: string
description: The id of the branch this branch was forked from
- type: 'null'
links:
type: object
required:
- self
- html
properties:
self:
type: string
format: uri
description: The URL of this resource on this API
html:
type: string
format: uri
description: The URL of this resource on Val Town
description: A Branch
TEnvironmentVariable:
type: object
required:
- key
- description
- updatedAt
- createdAt
properties:
key:
type: string
maxLength: 8192
pattern: ^[A-Za-z_][A-Z0-9a-z_]*$
description: Name or key of the environment variable, accessible via Deno.env or process.env
description:
anyOf:
- type: string
maxLength: 1024
description: Optional description of the environment variable
- type: 'null'
updatedAt:
anyOf:
- type: string
format: date-time
- type: 'null'
createdAt:
type: string
format: date-time
description: An environment variable
PaginationLinks:
type: object
required:
- self
properties:
self:
type: string
format: uri
description: URL of this page
prev:
type: string
format: uri
description: URL of the previous page, if any
next:
type: string
format: uri
description: URL of the next page, if any
description: Links to use for pagination
Val:
type: object
required:
- name
- id
- createdAt
- privacy
- author
- imageUrl
- description
- links
properties:
name:
type: string
id:
type: string
format: uuid
description: The id of the val
createdAt:
type: string
format: date-time
privacy:
enum:
- public
- unlisted
- private
description: This resource's privacy setting. Unlisted resources do not appear on profile pages or elsewhere, but you can link to them.
author:
type: object
required:
- type
- id
- username
properties:
type:
anyOf:
- type: string
enum:
- user
- type: string
enum:
- org
id:
type: string
format: uuid
username:
anyOf:
- type: string
- type: 'null'
imageUrl:
anyOf:
- type: string
description: The URL of this val's image
- type: 'null'
description:
anyOf:
- type: string
- type: 'null'
links:
type: object
required:
- self
- html
properties:
self:
type: string
format: uri
description: The URL of this resource on this API
html:
type: string
format: uri
description: The URL of this resource on Val Town
description: A Val
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: Endpoints that support authorization expect Bearer authentication, using an API token provided from Val Town.
externalDocs:
url: https://api.val.town/documentation
description: Find more info here