ApplyToVolunteer Tools API
The Tools API from ApplyToVolunteer — 5 operation(s) for tools.
The Tools API from ApplyToVolunteer — 5 operation(s) for tools.
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/applytovolunteer-com:applytovolunteer-com-tools-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Apply2Volunteer Tools API
version: 1.0.0
description: 'Convert volunteer PDFs into progressive online forms. Organization owners and admins create API keys in the dashboard. Send a key as Authorization: Bearer a2v_... The token starts with a2v_. This API does not implement OAuth. Public submit and anonymous grade or convert do not accept the key in place of a Turnstile token. Keyless agents use /mcp and POST /a2a for anonymous grade and preview.'
license:
name: Proprietary
url: https://applytovolunteer.com/terms
servers:
- url: https://applytovolunteer.com
security:
- orgApiKey: []
tags:
- name: Tools
paths:
/api/v1/tools/grade:
post:
operationId: gradePublicForm
summary: Grade a volunteer form
description: Form Grader (upload, URL, pasted, or form id). id and reportUrl (/tools/r/{id}) are present only for public grades. Saved-form grades omit id and reportUrl; owners use GET /api/v1/forms/{id}/grade. Anonymous grades omit restricted field labels from parsed; the score still counts them. The API key is optional. Anonymous calls need a Turnstile token in production. A failed check is 400 with error turnstile. A missing Turnstile configuration is 503. Dev and test skip verification. Keyless agents should use /mcp or POST /a2a instead of calling this route without a token. formId or formVersionId requires forms:read and does not use Turnstile. A key without forms:read is treated as anonymous.
security:
- orgApiKey: []
- {}
requestBody:
required: true
description: JSON or multipart. Anonymous URL, file, text, and pasted grades need turnstileToken in production. Saved-form grades need forms:read and do not use Turnstile.
content:
application/json:
schema:
type: object
properties:
url:
type: string
description: Page or file URL to grade or convert.
text:
type: string
description: Plain text of the form. Used when url, pasted, and form are absent.
pasted:
description: Parsed form JSON, or a structure with title and fields.
form:
description: Alias of pasted.
formId:
type: string
description: Saved form id. Requires an org API key with forms:read. Not anonymous. Convert rejects this.
formVersionId:
type: string
description: Saved form version id. Requires an org API key with forms:read. Convert rejects this.
turnstileToken:
type: string
description: Cloudflare Turnstile token. Required in production. Dev and test (ENVIRONMENT exactly dev or test) skip verification. A failed check is 400 with error turnstile. A missing Turnstile configuration is 503 with error turnstile_misconfigured. This token is not an org API key.
description: Send one input. Precedence is formId or formVersionId, then pasted or form, then url, then text. Do not send website; a non-empty string is rejected. Anonymous calls need turnstileToken in production. Saved-form grades do not.
multipart/form-data:
schema:
type: object
properties:
file:
type: string
description: PDF, Word (.docx), or image. Maximum 15 MB.
format: binary
url:
type: string
description: Used when file is absent.
pasted:
type: string
description: JSON text of a parsed form. Invalid JSON becomes an empty pasted form.
text:
type: string
description: Plain text. Used when file, url, and pasted are absent.
turnstileToken:
type: string
description: Turnstile token. Required in production for anonymous calls.
cf-turnstile-response:
type: string
description: Alias of turnstileToken. Ignored when turnstileToken is present, including when that value is an empty string.
description: Multipart alternative. Do not send website; a non-empty string is rejected. Provide file, url, pasted, or text.
responses:
'200':
description: Form Grader (upload, URL, pasted, or form id). id and reportUrl (/tools/r/{id}) are present only for public grades. Saved-form grades omit id and reportUrl; owners use GET /api/v1/forms/{id}/grade. Anonymous grades omit restricted field labels from parsed; the score still counts them.
content:
application/json:
schema:
type: object
properties:
id:
type: string
report:
type: object
additionalProperties: {}
parsed:
type: object
additionalProperties: {}
convertPath:
type: string
reportUrl:
type: string
required:
- report
- parsed
- convertPath
'400':
description: The body, query, or input failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'401':
description: No signed-in session and no live org API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'415':
description: The file type is not a PDF, Word document, or HTML page this route accepts.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'422':
description: The upload contains filled-in personal data. Send a blank form.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'429':
description: Too many requests from this network or organization.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'503':
description: Turnstile is not configured, or a required parser is unavailable.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
tags:
- Tools
/api/v1/tools/grade/{id}:
get:
operationId: getPublicGrade
summary: Fetch a public Form Grader report
description: Fetch a public Form Grader report. Org-internal grades 404. Restricted field labels are omitted; the stored score is unchanged. No API key. Org-internal grades are 404.
security: []
parameters:
- schema:
type: string
description: Public grade report id.
required: true
description: Public grade report id.
name: id
in: path
responses:
'200':
description: Fetch a public Form Grader report. Org-internal grades 404. Restricted field labels are omitted; the stored score is unchanged.
'400':
description: The body, query, or input failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'404':
description: The resource does not exist, or it is hidden from this caller. Several organization routes return 404 instead of 401 when the key is missing or the row is in another organization.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'429':
description: Too many requests from this network or organization.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
tags:
- Tools
/api/v1/tools/convert:
post:
operationId: createFormPreview
summary: Create a public converter preview
description: Public convert preview (size-capped). The API key is optional. Anonymous calls need a Turnstile token in production. A failed check is 400 with error turnstile. A missing Turnstile configuration is 503. Dev and test skip verification. Keyless agents should use /mcp or POST /a2a instead of calling this route without a token. formId and formVersionId are rejected. A key with forms:read stores the preview on that organization. A key without forms:read is treated as anonymous.
security:
- orgApiKey: []
- {}
requestBody:
required: true
description: JSON or multipart file, url, pasted form, or text. turnstileToken is required in production. formId and formVersionId are rejected.
content:
application/json:
schema:
type: object
properties:
url:
type: string
description: Page or file URL to grade or convert.
text:
type: string
description: Plain text of the form. Used when url, pasted, and form are absent.
pasted:
description: Parsed form JSON, or a structure with title and fields.
form:
description: Alias of pasted.
turnstileToken:
type: string
description: Cloudflare Turnstile token. Required in production. Dev and test (ENVIRONMENT exactly dev or test) skip verification. A failed check is 400 with error turnstile. A missing Turnstile configuration is 503 with error turnstile_misconfigured. This token is not an org API key.
description: Send a url, pasted form, form, or text. formId and formVersionId are rejected. Do not send website; a non-empty string is rejected. turnstileToken is required in production.
multipart/form-data:
schema:
type: object
properties:
file:
type: string
description: PDF, Word (.docx), or image. Maximum 15 MB.
format: binary
url:
type: string
description: Used when file is absent.
pasted:
type: string
description: JSON text of a parsed form. Invalid JSON becomes an empty pasted form.
text:
type: string
description: Plain text. Used when file, url, and pasted are absent.
turnstileToken:
type: string
description: Turnstile token. Required in production for anonymous calls.
cf-turnstile-response:
type: string
description: Alias of turnstileToken. Ignored when turnstileToken is present, including when that value is an empty string.
description: Multipart alternative for convert. form fields are not accepted here. turnstileToken is required in production. Do not send website.
responses:
'200':
description: Public convert preview (size-capped)
'400':
description: The body, query, or input failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'415':
description: The file type is not a PDF, Word document, or HTML page this route accepts.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'422':
description: The upload contains filled-in personal data. Send a blank form.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'429':
description: Too many requests from this network or organization.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'503':
description: Turnstile is not configured, or a required parser is unavailable.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
tags:
- Tools
/api/v1/tools/previews/{id}:
get:
operationId: getFormPreview
summary: Fetch a converter preview
description: Fetch a converter preview. No API key.
security: []
parameters:
- schema:
type: string
maxLength: 22
pattern: ^[A-Za-z0-9_-]{21}[AQgw]$
description: Preview id.
required: true
description: Preview id.
name: id
in: path
responses:
'200':
description: Fetch a converter preview
'400':
description: The body, query, or input failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'404':
description: The resource does not exist, or it is hidden from this caller. Several organization routes return 404 instead of 401 when the key is missing or the row is in another organization.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'429':
description: Too many requests from this network or organization.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
tags:
- Tools
/api/v1/tools/previews/{id}/claim:
post:
operationId: claimFormPreview
summary: Claim a preview as an organization draft
description: 'Claim a preview as an org draft form. 200 returns formId and versionId. 202 { pending: true } means the same organization already reserved this preview and the draft is still being saved; retry. 409 is a different organization. Requires an org API key with both forms:read and forms:write, or a browser session that is an owner or admin. forms:read resolves the organization. forms:write saves the draft. A key with only forms:write is 401. The organization comes from the key, not the body. No request fields are read.'
security:
- orgApiKey: []
parameters:
- schema:
type: string
maxLength: 22
pattern: ^[A-Za-z0-9_-]{21}[AQgw]$
description: Preview id.
required: true
description: Preview id.
name: id
in: path
requestBody:
required: false
description: No request body. The handler does not read one.
content:
application/json:
schema:
type: object
properties: {}
additionalProperties: false
description: No fields. The handler does not read a body.
responses:
'200':
description: 'Claim a preview as an org draft form. 200 returns formId and versionId. 202 { pending: true } means the same organization already reserved this preview and the draft is still being saved; retry. 409 is a different organization.'
'202':
description: 'The same organization already reserved this preview and the draft is still being saved. Body is { pending: true }. Retry the claim. This is not a conflict.'
content:
application/json:
schema:
type: object
properties:
pending:
type: boolean
enum:
- true
required:
- pending
'400':
description: The body, query, or input failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'401':
description: No signed-in session and no live org API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'403':
description: The API key is missing a required scope, or the action is not allowed.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'404':
description: The resource does not exist, or it is hidden from this caller. Several organization routes return 404 instead of 401 when the key is missing or the row is in another organization.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'409':
description: The write conflicts with the current state.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'415':
description: The file type is not a PDF, Word document, or HTML page this route accepts.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'422':
description: The upload contains filled-in personal data. Send a blank form.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'429':
description: Too many requests from this network or organization.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'503':
description: Turnstile is not configured, or a required parser is unavailable.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
tags:
- Tools
components:
schemas:
ApiError:
type: object
properties:
error:
type: string
description: Short error code or message.
message:
type: string
description: Human-readable detail when the handler sends one.
fields:
type: object
additionalProperties:
type: string
description: Field-level validation messages.
retryable:
type: boolean
description: Set on some public submit conflicts.
required:
- error
securitySchemes:
orgApiKey:
type: http
scheme: bearer
bearerFormat: a2v API key
description: Organization API key. REST reads Authorization and accepts only the exact prefix "Bearer " (capital B, one space) followed by a token that starts with a2v_. Put the a2v_ token in the bearer credential. Do not include the word Bearer in the token. Owners and admins create keys at /app/settings/api-keys. The secret is shown once. Revoked keys are rejected. This API does not implement OAuth. Scopes are forms:read, forms:write, applications:read, and applications:write. forms:write does not include forms:read. A new key defaults to forms:read and forms:write. applications:read and applications:write are opt-in. A browser session cookie is also accepted on organization routes. Agents send the bearer key.