ApplyToVolunteer Tools API

The Tools API from ApplyToVolunteer — 5 operation(s) for tools.

Operations 5

POST /api/v1/tools/grade Grade a volunteer form #
GET /api/v1/tools/grade/{id} Fetch a public Form Grader report #
POST /api/v1/tools/convert Create a public converter preview #
GET /api/v1/tools/previews/{id} Fetch a converter preview #
POST /api/v1/tools/previews/{id}/claim Claim a preview as an organization draft #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/applytovolunteer-com:applytovolunteer-com-tools-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

applytovolunteer-com-tools-api-openapi.yml Raw ↑
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.