Class FormSubmissionResource
- Namespace
- Crews.PlanningCenter.Api.People.V2025_07_02
- Assembly
- Crews.PlanningCenter.Api.dll
A form submission represents a single completed entry submitted through a Planning Center form.
### Creating submissionsPOST is supported so external integrations can record submissions captured outside of Church Center — for example, paper forms run through OCR. Creating a submission requires the access token to belong to a user who (1) has overall People permissions of Editor or above and (2) can manage the target form (a Manager, or a user with a manage FormShare).
### Identifying the submitter
Provide either person_id (an existing person in your organization) or person_attributes. When person_attributes is supplied, the API matches against existing profiles by first name (or given name or nickname) + last name + email address. If no match is found, a new person is created automatically.person_attributes accepts first_name, last_name, and emails_attributes (an array with at least one { "location": "...", "address": "..." } hash).
### Form values
Pass each answer as an included resource of type FormSubmissionValue, with form_field_id referencing a field on the form. The shape of value depends on the field's field_type: plain fields take a string, phone and address fields take an object, and file fields take an array of uploaded file references. See the FormSubmissionValue vertex for the full list of shapes and for how to upload files.
``
{
"data": { "attributes": { "person_id": "1" } },
"included": [
{ "type": "FormSubmissionValue", "attributes": { "form_field_id": "10", "value": "Blue" } },
{ "type": "FormSubmissionValue", "attributes": { "form_field_id": "11", "value": { "number": "555-555-1234", "location": "Mobile" } } },
{ "type": "FormSubmissionValue", "attributes": { "form_field_id": "12", "value": { "location": "Home", "street": "123 Main St", "city": "Carlsbad", "state": "CA", "zip": "92008", "country_code": "US" } } },
{ "type": "FormSubmissionValue", "attributes": { "form_field_id": "13", "value": [{ "fileID": "us4-2b1f6c0e-5d3a-4f7e-9c21-8a6d0e4b7f10", "fileName": "waiver.pdf" }] } }
]
}<code><br /><br />One important note: if the form field has options (for example, a checkboxes or dropdown field), the submitted </code>value should be the ID of the selected option, not the option's text.
### Side effects
A submission triggers the same side effects as a Church Center submission: notification emails to the form's subscribers, a confirmation email to the submitter (if the form is configured to send one), workflow card creation for workflow answer fields, and profile updates for contact info, birthdate, gender, household, custom fields, and other profile data.
The access token's user is recorded as the submitter, unless they are the person the submission is for. Profile updates from the submission are attributed to that user in the person's history.
When the resolved person is brand new (created by this submission), profile updates happen immediately and the submission is auto-verified. When the resolved person already exists and the form contains verification-required fields, a verification email is sent first; profile updates apply only after the submitter clicks the verification link — matching the behavior of an unauthenticated Church Center submission.
public record FormSubmissionResource : JsonApiResource<FormSubmission, FormSubmissionRelationships>, IEquatable<JsonApiResourceIdentifier>, IEquatable<JsonApiResource>, IEquatable<JsonApiResource<FormSubmission>>, IEquatable<JsonApiResource<FormSubmission, FormSubmissionRelationships>>, IEquatable<FormSubmissionResource>
- Inheritance
-
JsonApiResourceIdentifierJsonApiResourceJsonApiResource<FormSubmission>FormSubmissionResource
- Implements
-
IEquatable<JsonApiResourceIdentifier>IEquatable<JsonApiResource>
- Inherited Members
-
JsonApiResource<FormSubmission, FormSubmissionRelationships>.ToString()JsonApiResource<FormSubmission, FormSubmissionRelationships>.GetHashCode()JsonApiResource<FormSubmission, FormSubmissionRelationships>.Equals(JsonApiResource<FormSubmission>)JsonApiResource<FormSubmission, FormSubmissionRelationships>.Equals(JsonApiResource<FormSubmission, FormSubmissionRelationships>)JsonApiResource<FormSubmission, FormSubmissionRelationships>.<Clone>$()JsonApiResource<FormSubmission, FormSubmissionRelationships>.EqualityContractJsonApiResource<FormSubmission, FormSubmissionRelationships>.RelationshipsJsonApiResource<FormSubmission>.Equals(JsonApiResource)JsonApiResource<FormSubmission>.Equals(JsonApiResource<FormSubmission>)JsonApiResource<FormSubmission>.AttributesJsonApiResource.Equals(JsonApiResourceIdentifier)JsonApiResource.RelationshipsJsonApiResource.LinksJsonApiResource.MetaJsonApiResourceIdentifier.IdJsonApiResourceIdentifier.LIdJsonApiResourceIdentifier.Type
Constructors
FormSubmissionResource()
public FormSubmissionResource()
FormSubmissionResource(FormSubmissionResource)
protected FormSubmissionResource(FormSubmissionResource original)
Parameters
originalFormSubmissionResource
Properties
EqualityContract
protected override Type EqualityContract { get; }
Property Value
Methods
Equals(FormSubmissionResource?)
public virtual bool Equals(FormSubmissionResource? other)
Parameters
otherFormSubmissionResource
Returns
Equals(JsonApiResource<FormSubmission, FormSubmissionRelationships>?)
public override sealed bool Equals(JsonApiResource<FormSubmission, FormSubmissionRelationships>? other)
Parameters
otherJsonApiResource<FormSubmission, FormSubmissionRelationships>
Returns
Equals(object?)
public override bool Equals(object? obj)
Parameters
objobject
Returns
GetHashCode()
public override int GetHashCode()
Returns
PrintMembers(StringBuilder)
protected override bool PrintMembers(StringBuilder builder)
Parameters
builderStringBuilder
Returns
ToString()
public override string ToString()
Returns
Operators
operator ==(FormSubmissionResource?, FormSubmissionResource?)
public static bool operator ==(FormSubmissionResource? left, FormSubmissionResource? right)
Parameters
leftFormSubmissionResourcerightFormSubmissionResource
Returns
operator !=(FormSubmissionResource?, FormSubmissionResource?)
public static bool operator !=(FormSubmissionResource? left, FormSubmissionResource? right)
Parameters
leftFormSubmissionResourcerightFormSubmissionResource