Val Town vals API
These endpoints let you get, create, and run vals.
These endpoints let you get, create, and run vals.
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