Submittable Funds and Payments API
Manage funds - organizational budgets and grant distributions - and retrieve payment records. Read payments filterable by period, and work with the funds used to award and disburse grants to recipients.
Manage funds - organizational budgets and grant distributions - and retrieve payment records. Read payments filterable by period, and work with the funds used to award and disburse grants to recipients.
openapi: 3.0.3
info:
title: Submittable API
description: >-
The Submittable API (v4) provides read-and-write, programmatic access to
a Submittable account's data. Submittable is a submission management,
grants, and applications platform. This API exposes submissions and their
form-field entries, projects and forms, submitters (users), labels, review
team members and assignments, funds and payment distributions, and message
attachments. Authentication uses HTTP Basic Authentication, where an account
access token (found under More > Integrations > API Access) is sent as the
password portion of the Basic Auth header. The API is throttled at roughly
10 transactions per second and 10,000 transactions per hour. In v4,
submission and label identifiers are GUIDs and list endpoints page with
continuation tokens rather than page numbers.
This description is modeled from Submittable's public API reference and help
documentation. Endpoint paths, parameters, and schemas are honestly modeled
to reflect the documented resource groups; some request/response shapes are
generalized where the underlying account-gated reference does not publish a
machine-readable specification. Endpoints are marked endpointsModeled where
exact shapes were not confirmable without an authenticated account.
version: '4.0'
contact:
name: Submittable
url: https://www.submittable.com
x-endpointsModeled: true
servers:
- url: https://submittable-api.submittable.com/v4
description: Submittable API v4 (current)
- url: https://submittable-api.submittable.com/v3
description: Submittable API v3 (legacy)
security:
- basicAuth: []
tags:
- name: Submissions
description: Applications and entries sent to your projects.
- name: Entries
description: Form-field responses captured on submissions.
- name: Projects
description: The forms/programs people apply through.
- name: Users
description: Submitters - the people who send submissions.
- name: Teams
description: Organization team members and reviewers.
- name: Assignments
description: Routing of submissions to reviewers.
- name: Labels
description: Tags used to categorize submissions.
- name: Funds
description: Budgets and grant distributions.
- name: Payments
description: Payment records.
- name: Messaging
description: Message attachments.
paths:
/submissions:
get:
operationId: listSubmissions
tags:
- Submissions
summary: List submissions
description: >-
List submissions in the account. Supports filtering (for example by
project, status, label, or date range) and pagination via a
continuation token.
parameters:
- name: projectId
in: query
required: false
schema:
type: string
format: uuid
description: Filter submissions to a single project.
- name: status
in: query
required: false
schema:
type: string
description: Filter by submission status.
- name: continuationToken
in: query
required: false
schema:
type: string
description: Token returned by a previous page to fetch the next page.
- name: pageSize
in: query
required: false
schema:
type: integer
description: Number of items to return per page.
responses:
'200':
description: A paged list of submissions.
content:
application/json:
schema:
$ref: '#/components/schemas/SubmissionList'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
/submissions/{submissionId}:
parameters:
- name: submissionId
in: path
required: true
schema:
type: string
format: uuid
description: The GUID of the submission.
get:
operationId: getSubmission
tags:
- Submissions
summary: Get a submission
description: Retrieve a single submission by its GUID.
responses:
'200':
description: The requested submission.
content:
application/json:
schema:
$ref: '#/components/schemas/Submission'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: updateSubmission
tags:
- Submissions
summary: Update a submission
description: >-
Update mutable fields on a submission, such as its status or labels.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SubmissionUpdate'
responses:
'200':
description: The updated submission.
content:
application/json:
schema:
$ref: '#/components/schemas/Submission'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/entries:
get:
operationId: listEntries
tags:
- Entries
summary: List form-field entries
description: >-
List the form-field entries (answers) captured against submissions. In
v4 these consolidate the legacy v3 requests/responses endpoints.
parameters:
- name: continuationToken
in: query
required: false
schema:
type: string
responses:
'200':
description: A paged list of entries.
content:
application/json:
schema:
$ref: '#/components/schemas/EntryList'
'401':
$ref: '#/components/responses/Unauthorized'
/entries/{entryId}:
parameters:
- name: entryId
in: path
required: true
schema:
type: string
get:
operationId: getEntry
tags:
- Entries
summary: Get an entry
description: Retrieve a single form-field entry.
responses:
'200':
description: The requested entry.
content:
application/json:
schema:
$ref: '#/components/schemas/Entry'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/entries/submissions/{submissionId}:
parameters:
- name: submissionId
in: path
required: true
schema:
type: string
format: uuid
get:
operationId: getSubmissionEntries
tags:
- Entries
summary: Get entries for a submission
description: Retrieve the form-field entries captured on a specific submission.
responses:
'200':
description: The entries for the submission.
content:
application/json:
schema:
$ref: '#/components/schemas/EntryList'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/projects:
get:
operationId: listProjects
tags:
- Projects
summary: List projects
description: List the projects (forms/programs) in the account.
responses:
'200':
description: A list of projects.
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectList'
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createProject
tags:
- Projects
summary: Create a project
description: Create a new project (form/program).
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectCreate'
responses:
'201':
description: The created project.
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
'401':
$ref: '#/components/responses/Unauthorized'
/projects/{projectId}:
parameters:
- name: projectId
in: path
required: true
schema:
type: string
format: uuid
get:
operationId: getProject
tags:
- Projects
summary: Get a project
description: Retrieve a single project by GUID.
responses:
'200':
description: The requested project.
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: updateProject
tags:
- Projects
summary: Update a project
description: Modify a project, including duplicating or updating its settings.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectCreate'
responses:
'200':
description: The updated project.
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/users:
get:
operationId: listUsers
tags:
- Users
summary: List submitters
description: >-
Retrieve submitters - the people who have created accounts and sent
submissions to your projects.
parameters:
- name: continuationToken
in: query
required: false
schema:
type: string
responses:
'200':
description: A paged list of submitters.
content:
application/json:
schema:
$ref: '#/components/schemas/UserList'
'401':
$ref: '#/components/responses/Unauthorized'
/users/{userId}:
parameters:
- name: userId
in: path
required: true
schema:
type: string
format: uuid
get:
operationId: getUser
tags:
- Users
summary: Get a submitter
description: Retrieve a single submitter's profile.
responses:
'200':
description: The requested submitter.
content:
application/json:
schema:
$ref: '#/components/schemas/User'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/organizations/team:
get:
operationId: listTeamMembers
tags:
- Teams
summary: List team members
description: List the organization's team members (staff and reviewers).
responses:
'200':
description: A list of team members.
content:
application/json:
schema:
$ref: '#/components/schemas/UserList'
'401':
$ref: '#/components/responses/Unauthorized'
/submissions/team/assignment:
post:
operationId: assignSubmission
tags:
- Assignments
summary: Assign a submission to a reviewer
description: >-
Create a review assignment routing a submission to a team member for
evaluation.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AssignmentCreate'
responses:
'200':
description: The created assignment.
content:
application/json:
schema:
$ref: '#/components/schemas/Assignment'
'401':
$ref: '#/components/responses/Unauthorized'
/labels:
get:
operationId: listLabels
tags:
- Labels
summary: List labels
description: List the labels (tags) defined in the account.
responses:
'200':
description: A list of labels.
content:
application/json:
schema:
$ref: '#/components/schemas/LabelList'
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createLabel
tags:
- Labels
summary: Create a label
description: Create a new label used to categorize submissions.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LabelCreate'
responses:
'201':
description: The created label.
content:
application/json:
schema:
$ref: '#/components/schemas/Label'
'401':
$ref: '#/components/responses/Unauthorized'
/funds:
get:
operationId: listFunds
tags:
- Funds
summary: List funds
description: List the funds (budgets) used to award and disburse grants.
responses:
'200':
description: A list of funds.
content:
application/json:
schema:
$ref: '#/components/schemas/FundList'
'401':
$ref: '#/components/responses/Unauthorized'
/payments:
get:
operationId: listPayments
tags:
- Payments
summary: List payments
description: >-
Retrieve payment records, filterable by period (for example year and
month).
parameters:
- name: year
in: query
required: false
schema:
type: integer
- name: month
in: query
required: false
schema:
type: integer
responses:
'200':
description: A list of payments.
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentList'
'401':
$ref: '#/components/responses/Unauthorized'
/messaging/{messageId}/files:
parameters:
- name: messageId
in: path
required: true
schema:
type: string
format: uuid
get:
operationId: getMessageFiles
tags:
- Messaging
summary: Get message attachments
description: Retrieve the files attached to a message.
responses:
'200':
description: The attached files.
content:
application/json:
schema:
$ref: '#/components/schemas/FileList'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
components:
securitySchemes:
basicAuth:
type: http
scheme: basic
description: >-
HTTP Basic Authentication. Send your account access token as the
password portion of the Basic Auth header (the username may be left
blank or set to your account email, per Submittable's documentation).
responses:
Unauthorized:
description: Authentication failed or was not provided.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: The requested resource was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
TooManyRequests:
description: >-
Rate limit exceeded. The API allows roughly 10 transactions per second
and 10,000 per hour.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Error:
type: object
properties:
error:
type: string
message:
type: string
Paged:
type: object
properties:
continuationToken:
type: string
nullable: true
description: Token to pass on the next request to retrieve the next page.
totalCount:
type: integer
nullable: true
Submission:
type: object
properties:
submissionId:
type: string
format: uuid
title:
type: string
status:
type: string
projectId:
type: string
format: uuid
submitterId:
type: string
format: uuid
labels:
type: array
items:
$ref: '#/components/schemas/Label'
submittedAt:
type: string
format: date-time
SubmissionUpdate:
type: object
properties:
status:
type: string
labelIds:
type: array
items:
type: string
format: uuid
SubmissionList:
allOf:
- $ref: '#/components/schemas/Paged'
- type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/Submission'
Entry:
type: object
properties:
entryId:
type: string
submissionId:
type: string
format: uuid
fieldLabel:
type: string
value:
type: string
EntryList:
allOf:
- $ref: '#/components/schemas/Paged'
- type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/Entry'
Project:
type: object
properties:
projectId:
type: string
format: uuid
name:
type: string
status:
type: string
formId:
type: string
format: uuid
ProjectCreate:
type: object
properties:
name:
type: string
status:
type: string
ProjectList:
allOf:
- $ref: '#/components/schemas/Paged'
- type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/Project'
User:
type: object
properties:
userId:
type: string
format: uuid
firstName:
type: string
lastName:
type: string
email:
type: string
format: email
UserList:
allOf:
- $ref: '#/components/schemas/Paged'
- type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/User'
Assignment:
type: object
properties:
assignmentId:
type: string
format: uuid
submissionId:
type: string
format: uuid
assigneeId:
type: string
format: uuid
status:
type: string
AssignmentCreate:
type: object
required:
- submissionId
- assigneeId
properties:
submissionId:
type: string
format: uuid
assigneeId:
type: string
format: uuid
Label:
type: object
properties:
labelId:
type: string
format: uuid
name:
type: string
color:
type: string
LabelCreate:
type: object
required:
- name
properties:
name:
type: string
color:
type: string
LabelList:
allOf:
- $ref: '#/components/schemas/Paged'
- type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/Label'
Fund:
type: object
properties:
fundId:
type: string
format: uuid
name:
type: string
balance:
type: number
currency:
type: string
FundList:
allOf:
- $ref: '#/components/schemas/Paged'
- type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/Fund'
Payment:
type: object
properties:
paymentId:
type: string
format: uuid
amount:
type: number
currency:
type: string
recipientId:
type: string
format: uuid
paidAt:
type: string
format: date-time
PaymentList:
allOf:
- $ref: '#/components/schemas/Paged'
- type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/Payment'
File:
type: object
properties:
fileId:
type: string
format: uuid
fileName:
type: string
url:
type: string
format: uri
contentType:
type: string
FileList:
allOf:
- $ref: '#/components/schemas/Paged'
- type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/File'