> For the complete documentation index, see [llms.txt](https://developers.trooply.co.uk/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.trooply.co.uk/models.md).

# Models

## The SuccessResponse object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"SuccessResponse":{"type":"object","properties":{"data":{},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"ResponseMeta":{"type":"object","properties":{"page":{"type":"integer"},"per_page":{"type":"integer"},"request_id":{"type":"string","format":"uuid"},"total":{"type":"integer"}}}}}}
```

## The ErrorDetail object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"ErrorDetail":{"type":"object","properties":{"code":{"type":"string"},"fields":{"type":"object","additionalProperties":{"type":"string"}},"message":{"type":"string"},"request_id":{"type":"string","format":"uuid"},"status":{"type":"integer"}}}}}}
```

## The ErrorResponse object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"ErrorResponse":{"type":"object","properties":{"error":{"$ref":"#/components/schemas/ErrorDetail"}}},"ErrorDetail":{"type":"object","properties":{"code":{"type":"string"},"fields":{"type":"object","additionalProperties":{"type":"string"}},"message":{"type":"string"},"request_id":{"type":"string","format":"uuid"},"status":{"type":"integer"}}}}}}
```

## The ResponseMeta object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"ResponseMeta":{"type":"object","properties":{"page":{"type":"integer"},"per_page":{"type":"integer"},"request_id":{"type":"string","format":"uuid"},"total":{"type":"integer"}}}}}}
```

## The MemberActivityEntry object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"MemberActivityEntry":{"type":"object","properties":{"action":{"type":"string"},"actor_name":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"id":{"type":"string","format":"uuid"},"title":{"type":"string"}}}}}}
```

## The Agreement object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"Agreement":{"type":"object","properties":{"asset_id":{"description":"AssetID links the document in the asset system.","type":"string","format":"uuid"},"consent_statement":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"created_by":{"type":"string","format":"uuid"},"document_hash":{"description":"DocumentHash is the SHA-256 (hex) of the document bytes, pinning the exact\ncontent of this agreement.","type":"string"},"download_expires_at":{"description":"DownloadExpiresAt is when DownloadURL stops working.","type":"string","format":"date-time"},"download_url":{"description":"DownloadURL is a short-lived presigned URL to fetch the document; it is\ncomputed per response, not stored. Empty when generation is unconfigured.","type":"string"},"group_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"signed_at":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["unsigned","signed","void"]},"title":{"type":"string"},"type":{"type":"string"},"updated_at":{"type":"string","format":"date-time"},"version":{"type":"string"}}}}}}
```

## The DPAStatus object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"DPAStatus":{"type":"object","properties":{"agreement_id":{"description":"AgreementID identifies the signed agreement, if any.","type":"string","format":"uuid"},"current_version":{"description":"CurrentVersion is the DPA template version currently in force, if published.","type":"string"},"signed":{"description":"Signed is true if the group has any signed DPA agreement.","type":"boolean"},"signed_at":{"description":"SignedAt is when the group last signed, if any.","type":"string","format":"date-time"},"signed_version":{"description":"SignedVersion is the version the group signed, if any.","type":"string"},"up_to_date":{"description":"UpToDate is true if the signed DPA matches the template version currently in\nforce. False when unsigned, or when only an older version was signed.","type":"boolean"}}}}}}
```

## The Document object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"Document":{"type":"object","properties":{"body":{"type":"string"},"consent_statement":{"type":"string"},"content_hash":{"type":"string"},"effective_from":{"type":"string","format":"date-time"},"id":{"type":"string","format":"uuid"},"jurisdiction":{"type":"string"},"title":{"type":"string"},"version":{"type":"string"}}}}}}
```

## The GenerateDPARequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"GenerateDPARequest":{"type":"object","required":["group_address","group_name"],"properties":{"group_address":{"type":"string","maxLength":1000,"minLength":1},"group_name":{"type":"string","maxLength":300,"minLength":1}}}}}}
```

## The SignRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"SignRequest":{"type":"object","required":["agreed_hash","signer_name"],"properties":{"accepted":{"description":"Accepted must be true: the affirmative act of agreement.","type":"boolean"},"agreed_hash":{"description":"AgreedHash must match the agreement's document hash, proving the signer saw\nthe exact document. A mismatch returns 409.","type":"string"},"signer_name":{"type":"string","maxLength":200,"minLength":1},"signer_title":{"type":"string","maxLength":200}}}}}}
```

## The Signature object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"Signature":{"type":"object","properties":{"actor_ip":{"type":"string"},"actor_user_agent":{"type":"string"},"agreement_id":{"type":"string","format":"uuid"},"agreement_type":{"type":"string"},"agreement_version":{"type":"string"},"asset_id":{"type":"string","format":"uuid"},"checksum":{"type":"string"},"consent_statement":{"type":"string"},"document_hash":{"type":"string"},"executed_asset_id":{"description":"ExecutedAssetID / ExecutedDocumentHash reference the PAdES-signed \"executed\"\nPDF (agreement + certificate page + digital signature + timestamp). Null\nwhen PDF signing was not configured at signing time.","type":"string","format":"uuid"},"executed_document_hash":{"type":"string"},"executed_download_url":{"description":"ExecutedDownloadURL is a short-lived presigned URL to the signed PDF;\ncomputed per response, not stored.","type":"string"},"group_id":{"type":"string","format":"uuid"},"group_name":{"type":"string"},"id":{"type":"string","format":"uuid"},"request_id":{"type":"string"},"signed_at":{"type":"string","format":"date-time"},"signer_email":{"type":"string"},"signer_id":{"type":"string","format":"uuid"},"signer_name":{"type":"string"},"signer_role":{"type":"string"},"signer_title":{"type":"string"}}}}}}
```

## The VerificationResult object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"VerificationResult":{"type":"object","properties":{"agreement_id":{"type":"string","format":"uuid"},"checksum_valid":{"description":"ChecksumValid is true if the checksum recomputed from the stored signature\nfields matches the stored checksum.","type":"boolean"},"document_intact":{"description":"DocumentIntact is true if re-hashing the stored document reproduces the\nhash recorded at signing (the document has not been tampered with).","type":"boolean"},"document_resolved":{"description":"DocumentResolved is true if the signed document bytes could be read back.","type":"boolean"},"executed_document_intact":{"description":"ExecutedDocumentIntact is true if the stored signed PDF still matches the\nhash recorded at signing.","type":"boolean"},"executed_present":{"description":"ExecutedPresent is true if a PAdES-signed executed PDF was recorded.","type":"boolean"},"notes":{"description":"Notes carries human-readable detail for each failed check.","type":"array","items":{"type":"string"}},"signature_id":{"type":"string","format":"uuid"},"valid":{"description":"Valid is true only if every check below passed.","type":"boolean"}}}}}}
```

## The Asset object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"Asset":{"type":"object","properties":{"content_type":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"etag":{"type":"string"},"id":{"type":"string","format":"uuid"},"object_key":{"type":"string"},"original_filename":{"type":"string"},"owner_id":{"type":"string","format":"uuid"},"public_url":{"description":"PublicURL is the URL the bytes can be fetched from. For public assets it is\nthe stable CDN URL; for private assets it is a short-lived presigned GET\nURL that expires (re-fetch the asset to obtain a fresh one).","type":"string"},"size_bytes":{"type":"integer"},"status":{"type":"string"},"updated_at":{"type":"string","format":"date-time"},"visibility":{"type":"string","enum":["public","private"]}}}}}}
```

## The CreateAssetRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"CreateAssetRequest":{"type":"object","required":["filename"],"properties":{"content_type":{"type":"string","maxLength":255},"filename":{"type":"string","maxLength":512,"minLength":1},"visibility":{"description":"Visibility selects which bucket the object is stored in. \"public\" (the\ndefault when omitted) serves bytes from the CDN; \"private\" keeps them in\nthe private bucket, readable only via short-lived presigned URLs.","type":"string","enum":["public","private"]}}}}}}
```

## The CreateAssetResult object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"CreateAssetResult":{"type":"object","properties":{"asset":{"$ref":"#/components/schemas/Asset"},"expires_at":{"type":"string","format":"date-time"},"upload_url":{"type":"string"}}},"Asset":{"type":"object","properties":{"content_type":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"etag":{"type":"string"},"id":{"type":"string","format":"uuid"},"object_key":{"type":"string"},"original_filename":{"type":"string"},"owner_id":{"type":"string","format":"uuid"},"public_url":{"description":"PublicURL is the URL the bytes can be fetched from. For public assets it is\nthe stable CDN URL; for private assets it is a short-lived presigned GET\nURL that expires (re-fetch the asset to obtain a fresh one).","type":"string"},"size_bytes":{"type":"integer"},"status":{"type":"string"},"updated_at":{"type":"string","format":"date-time"},"visibility":{"type":"string","enum":["public","private"]}}}}}}
```

## The ClaimRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"ClaimRequest":{"type":"object","required":["tsa_group_id"],"properties":{"section_ids":{"description":"optional; seeds all TSA sections if absent","type":"array","items":{"type":"string"}},"tsa_group_id":{"type":"string","format":"uuid"}}}}}}
```

## The ClaimResult object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"ClaimResult":{"type":"object","properties":{"group":{"$ref":"#/components/schemas/ClaimedGroup"},"membership":{"$ref":"#/components/schemas/ClaimedMembership"},"sections":{"type":"array","items":{"$ref":"#/components/schemas/ClaimedSection"}}}},"ClaimedGroup":{"type":"object","properties":{"claimed_at":{"type":"string","format":"date-time"},"county":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"district":{"type":"string"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"postcode":{"type":"string"},"tsa_group_id":{"type":"string","format":"uuid"}}},"ClaimedMembership":{"type":"object","properties":{"group_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"role":{"type":"string"},"status":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"ClaimedSection":{"type":"object","properties":{"badge_framework":{"type":"string"},"group_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"section_type":{"type":"string"},"tsa_section_id":{"type":"string","format":"uuid"}}}}}}
```

## The ClaimedGroup object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"ClaimedGroup":{"type":"object","properties":{"claimed_at":{"type":"string","format":"date-time"},"county":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"district":{"type":"string"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"postcode":{"type":"string"},"tsa_group_id":{"type":"string","format":"uuid"}}}}}}
```

## The ClaimedMembership object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"ClaimedMembership":{"type":"object","properties":{"group_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"role":{"type":"string"},"status":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}}}}}
```

## The ClaimedSection object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"ClaimedSection":{"type":"object","properties":{"badge_framework":{"type":"string"},"group_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"section_type":{"type":"string"},"tsa_section_id":{"type":"string","format":"uuid"}}}}}}
```

## The TSAGroupResult object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"TSAGroupResult":{"type":"object","properties":{"district_name":{"type":"string"},"id":{"type":"string","format":"uuid"},"meeting_days":{"type":"array","items":{"type":"integer"}},"name":{"type":"string"},"postcode":{"type":"string"}}}}}}
```

## The TSASectionResult object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"TSASectionResult":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"postcode":{"type":"string"},"section_type":{"type":"string"}}}}}}
```

## The Category object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"Category":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"description":{"type":"string"},"group_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"scope":{"type":"string"},"sort_order":{"type":"integer"},"updated_at":{"type":"string","format":"date-time"}}}}}}
```

## The CreateCategoryRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"CreateCategoryRequest":{"type":"object","required":["name"],"properties":{"description":{"type":"string"},"name":{"type":"string","maxLength":100,"minLength":1},"sort_order":{"type":"integer"}}}}}}
```

## The CreateFieldDefRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"CreateFieldDefRequest":{"type":"object","required":["field_type","label","name"],"properties":{"description":{"type":"string"},"field_type":{"type":"string"},"is_required":{"type":"boolean"},"label":{"type":"string","maxLength":200,"minLength":1},"name":{"type":"string","maxLength":100,"minLength":1},"options":{"type":"array","items":{"type":"integer"}},"sort_order":{"type":"integer"}}}}}}
```

## The CreateToggleRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"CreateToggleRequest":{"type":"object","required":["field_def_id"],"properties":{"field_def_id":{"type":"string","format":"uuid"},"is_required":{"type":"boolean"},"sort_order":{"type":"integer"}}}}}}
```

## The FieldDef object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"FieldDef":{"type":"object","properties":{"category_id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"description":{"type":"string"},"field_type":{"type":"string"},"group_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"is_active":{"type":"boolean"},"is_required":{"type":"boolean"},"label":{"type":"string"},"name":{"type":"string"},"options":{"type":"array","items":{"type":"integer"}},"scope":{"type":"string"},"section_id":{"type":"string","format":"uuid"},"sort_order":{"type":"integer"},"updated_at":{"type":"string","format":"date-time"}}}}}}
```

## The FieldValue object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"FieldValue":{"type":"object","properties":{"field_def_id":{"type":"string","format":"uuid"},"field_name":{"type":"string"},"field_type":{"type":"string"},"group_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"member_id":{"type":"string","format":"uuid"},"options":{"type":"array","items":{"type":"integer"}},"value":{"type":"string"}}}}}}
```

## The SetFieldValuesRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"SetFieldValuesRequest":{"type":"object","required":["group_id","values"],"properties":{"group_id":{"type":"string","format":"uuid"},"values":{"type":"object","additionalProperties":{"type":"string"}}}}}}}
```

## The Toggle object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"Toggle":{"type":"object","properties":{"field_def_id":{"type":"string","format":"uuid"},"is_required":{"type":"boolean"},"section_id":{"type":"string","format":"uuid"},"sort_order":{"type":"integer"}}}}}}
```

## The UpdateCategoryRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"UpdateCategoryRequest":{"type":"object","properties":{"description":{"type":"string"},"name":{"type":"string","maxLength":100,"minLength":1},"sort_order":{"type":"integer"}}}}}}
```

## The UpdateFieldDefRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"UpdateFieldDefRequest":{"type":"object","properties":{"category_id":{"type":"string","format":"uuid"},"description":{"type":"string"},"is_active":{"type":"boolean"},"is_required":{"type":"boolean"},"label":{"type":"string","maxLength":200,"minLength":1},"options":{"type":"array","items":{"type":"integer"}},"sort_order":{"type":"integer"}}}}}}
```

## The CreateGroupRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"CreateGroupRequest":{"type":"object","required":["name"],"properties":{"name":{"type":"string","maxLength":200,"minLength":1},"parent_group_id":{"type":"string","format":"uuid"}}}}}}
```

## The Group object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"Group":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"district":{"type":"string"},"id":{"type":"string","format":"uuid"},"meeting_place":{"type":"string"},"name":{"type":"string"},"parent_group_id":{"type":"string","format":"uuid"},"slug":{"type":"string"},"tsa_group_id":{"description":"TSAGroupID is the linked TSA catalogue group's UUID — the key the public\n/v1/tsa/groups/{id}/sections endpoint accepts. Nil for unclaimed groups.","type":"string","format":"uuid"},"tsa_group_number":{"type":"integer"},"updated_at":{"type":"string","format":"date-time"}}}}}}
```

## The UpdateGroupRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"UpdateGroupRequest":{"type":"object","properties":{"meeting_place":{"type":"string","maxLength":500},"name":{"type":"string","maxLength":200,"minLength":1},"parent_group_id":{"type":"string","format":"uuid"}}}}}}
```

## The CreateGuardianRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"CreateGuardianRequest":{"type":"object","required":["first_name","last_name"],"properties":{"email":{"type":"string"},"first_name":{"type":"string","maxLength":100,"minLength":1},"is_emergency_contact":{"type":"boolean"},"is_primary":{"type":"boolean"},"last_name":{"type":"string","maxLength":100,"minLength":1},"phone":{"type":"string","maxLength":50},"relationship":{"type":"string","maxLength":100}}}}}}
```

## The Guardian object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"Guardian":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"email":{"type":"string"},"first_name":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_emergency_contact":{"description":"IsEmergencyContact marks a guardian as an emergency contact. Independent of\nIsPrimary: a member may have several emergency contacts.","type":"boolean"},"is_primary":{"type":"boolean"},"last_name":{"type":"string"},"member_id":{"type":"string","format":"uuid"},"phone":{"type":"string"},"relationship":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}}}}}}
```

## The UpdateGuardianRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"UpdateGuardianRequest":{"type":"object","properties":{"email":{"type":"string"},"first_name":{"type":"string","maxLength":100,"minLength":1},"is_emergency_contact":{"description":"IsEmergencyContact is a pointer so an omitted field leaves the flag\nunchanged, while an explicit true/false writes through.","type":"boolean"},"is_primary":{"type":"boolean"},"last_name":{"type":"string","maxLength":100,"minLength":1},"phone":{"type":"string","maxLength":50},"relationship":{"type":"string","maxLength":100}}}}}}
```

## The ImportJob object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"ImportJob":{"type":"object","properties":{"error":{"type":"string"},"finished_at":{"type":"string"},"group_id":{"type":"string","format":"uuid"},"heartbeat_at":{"type":"string","format":"date-time"},"id":{"type":"string","format":"uuid"},"progress":{"type":"array","items":{"type":"integer"}},"queued_at":{"type":"string","format":"date-time"},"source":{"type":"string"},"started_at":{"type":"string","format":"date-time"},"status":{"type":"string"}}}}}}
```

## The TriggerRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"TriggerRequest":{"type":"object","required":["source"],"properties":{"source":{"type":"string","enum":["osm"]}}}}}}
```

## The AcceptInviteRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"AcceptInviteRequest":{"type":"object","required":["token"],"properties":{"token":{"type":"string"}}}}}}
```

## The CreateInvitesRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"CreateInvitesRequest":{"type":"object","required":["invites"],"properties":{"invites":{"type":"array","maxItems":50,"minItems":1,"items":{"$ref":"#/components/schemas/InviteInput"}}}},"InviteInput":{"type":"object","required":["email"],"properties":{"email":{"type":"string"},"role":{"type":"string","enum":["gsl","admin","section_leader","assistant_leader","helper"]}}}}}}
```

## The Invitation object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"Invitation":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"email":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"group_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"role":{"type":"string"},"status":{"type":"string"}}}}}}
```

## The InviteInput object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"InviteInput":{"type":"object","required":["email"],"properties":{"email":{"type":"string"},"role":{"type":"string","enum":["gsl","admin","section_leader","assistant_leader","helper"]}}}}}}
```

## The InvitesMembership object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"InvitesMembership":{"type":"object","properties":{"group_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"role":{"type":"string"},"status":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}}}}}
```

## The ApproveRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"ApproveRequest":{"type":"object","required":["role"],"properties":{"role":{"type":"string","enum":["gsl","admin","section_leader","assistant_leader","helper"]},"section_id":{"type":"string","format":"uuid"}}}}}}
```

## The ApproveResult object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"ApproveResult":{"type":"object","properties":{"membership":{"$ref":"#/components/schemas/JoinrequestsMembership"},"request":{"$ref":"#/components/schemas/JoinRequest"}}},"JoinrequestsMembership":{"type":"object","properties":{"group_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"role":{"type":"string"},"status":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"JoinRequest":{"type":"object","properties":{"assigned_role":{"type":"string"},"assigned_section_id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"escalated_at":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"group_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"requested_role":{"type":"string"},"requester_user_id":{"type":"string","format":"uuid"},"status":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}}}}}}
```

## The CreateRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"CreateRequest":{"type":"object","properties":{"requested_role":{"type":"string","maxLength":100}}}}}}
```

## The JoinRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"JoinRequest":{"type":"object","properties":{"assigned_role":{"type":"string"},"assigned_section_id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"escalated_at":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"group_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"requested_role":{"type":"string"},"requester_user_id":{"type":"string","format":"uuid"},"status":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}}}}}}
```

## The JoinrequestsMembership object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"JoinrequestsMembership":{"type":"object","properties":{"group_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"role":{"type":"string"},"status":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}}}}}
```

## The VerifyRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"VerifyRequest":{"type":"object","required":["dc_contact","declared_role","tsa_membership_number"],"properties":{"dc_contact":{"type":"string","maxLength":200,"minLength":1},"declared_role":{"type":"string","maxLength":100,"minLength":1},"tsa_membership_number":{"type":"string","maxLength":100,"minLength":1}}}}}}
```

## The CreateMemberRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"CreateMemberRequest":{"type":"object","required":["date_of_birth","first_name","gender","last_name"],"properties":{"date_of_birth":{"type":"string","format":"date-time"},"dietary_requirements":{"type":"string"},"field_values":{"type":"array","items":{"$ref":"#/components/schemas/FieldValueInput"}},"first_name":{"type":"string","maxLength":100,"minLength":1},"gender":{"type":"string"},"last_name":{"type":"string","maxLength":100,"minLength":1},"primary_email":{"type":"string"},"primary_phone":{"type":"string","maxLength":50},"profile_picture_asset_id":{"type":"string","format":"uuid"},"section_id":{"type":"string","format":"uuid"}}},"FieldValueInput":{"type":"object","properties":{"field_def_id":{"type":"string","format":"uuid"},"value":{"type":"string"}}}}}}
```

## The FieldValueInput object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"FieldValueInput":{"type":"object","properties":{"field_def_id":{"type":"string","format":"uuid"},"value":{"type":"string"}}}}}}
```

## The Member object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"Member":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"date_of_birth":{"type":"string","format":"date-time"},"dietary_requirements":{"type":"string"},"first_name":{"type":"string"},"gender":{"type":"string"},"id":{"type":"string","format":"uuid"},"last_name":{"type":"string"},"primary_email":{"type":"string"},"primary_phone":{"type":"string"},"profile_picture_asset_id":{"type":"string","format":"uuid"},"updated_at":{"type":"string","format":"date-time"}}}}}}
```

## The MembersMembership object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"MembersMembership":{"type":"object","properties":{"consent_contact":{"type":"string"},"consent_given_at":{"type":"string","format":"date-time"},"consent_given_by":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"group_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"joined_at":{"type":"string","format":"date-time"},"left_at":{"type":"string"},"member_id":{"type":"string","format":"uuid"},"status":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}}}}}}
```

## The TransferRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"TransferRequest":{"type":"object","required":["target_group_id"],"properties":{"target_group_id":{"type":"string","format":"uuid"}}}}}}
```

## The UpdateMemberRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"UpdateMemberRequest":{"type":"object","properties":{"date_of_birth":{"type":"string","format":"date-time"},"dietary_requirements":{"type":"string"},"field_values":{"type":"array","items":{"$ref":"#/components/schemas/FieldValueInput"}},"first_name":{"type":"string","maxLength":100,"minLength":1},"gender":{"type":"string"},"last_name":{"type":"string","maxLength":100,"minLength":1},"primary_email":{"type":"string"},"primary_phone":{"type":"string","maxLength":50},"profile_picture_asset_id":{"type":"string","format":"uuid"}}},"FieldValueInput":{"type":"object","properties":{"field_def_id":{"type":"string","format":"uuid"},"value":{"type":"string"}}}}}}
```

## The AdvanceRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"AdvanceRequest":{"type":"object","required":["step"],"properties":{"completed":{"type":"boolean"},"step":{"type":"string","maxLength":100}}}}}}
```

## The Checklist object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"Checklist":{"type":"object","properties":{"add_members":{"$ref":"#/components/schemas/ChecklistItem"},"assign_leaders":{"$ref":"#/components/schemas/ChecklistItem"},"first_attendance":{"$ref":"#/components/schemas/ChecklistItem"}}},"ChecklistItem":{"type":"object","properties":{"detail":{"type":"string"},"done":{"type":"boolean"}}}}}}
```

## The ChecklistItem object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"ChecklistItem":{"type":"object","properties":{"detail":{"type":"string"},"done":{"type":"boolean"}}}}}}
```

## The State object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"State":{"type":"object","properties":{"checklist":{"$ref":"#/components/schemas/Checklist"},"complete":{"type":"boolean"},"step":{"type":"string"}}},"Checklist":{"type":"object","properties":{"add_members":{"$ref":"#/components/schemas/ChecklistItem"},"assign_leaders":{"$ref":"#/components/schemas/ChecklistItem"},"first_attendance":{"$ref":"#/components/schemas/ChecklistItem"}}},"ChecklistItem":{"type":"object","properties":{"detail":{"type":"string"},"done":{"type":"boolean"}}}}}}
```

## The CreateSectionRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"CreateSectionRequest":{"type":"object","required":["name","section_type"],"properties":{"name":{"type":"string","maxLength":200,"minLength":1},"section_type":{"type":"string","maxLength":100,"minLength":1}}}}}}
```

## The Section object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"Section":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"group_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"section_type":{"type":"string"},"slug":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}}}}}}
```

## The UpdateSectionRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"UpdateSectionRequest":{"type":"object","properties":{"name":{"type":"string","maxLength":200,"minLength":1},"section_type":{"type":"string","maxLength":100,"minLength":1}}}}}}
```

## The Me object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"Me":{"type":"object","properties":{"memberships":{"type":"array","items":{"$ref":"#/components/schemas/UsersMembership"}},"profile":{"$ref":"#/components/schemas/Profile"}}},"UsersMembership":{"type":"object","properties":{"group_id":{"type":"string","format":"uuid"},"role":{"type":"string"},"section_id":{"type":"string","format":"uuid"},"status":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"Profile":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"first_name":{"type":"string"},"id":{"type":"string","format":"uuid"},"last_name":{"type":"string"},"onboarding_completed_at":{"type":"string","format":"date-time"},"onboarding_step":{"type":"string"},"scouting_role":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}}}}}}
```

## The UsersMembership object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"UsersMembership":{"type":"object","properties":{"group_id":{"type":"string","format":"uuid"},"role":{"type":"string"},"section_id":{"type":"string","format":"uuid"},"status":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}}}}}
```

## The Profile object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"Profile":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"first_name":{"type":"string"},"id":{"type":"string","format":"uuid"},"last_name":{"type":"string"},"onboarding_completed_at":{"type":"string","format":"date-time"},"onboarding_step":{"type":"string"},"scouting_role":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}}}}}}
```

## The UpsertProfileRequest object

```json
{"openapi":"3.1.1","info":{"title":"Trooply API","version":"1.0"},"components":{"schemas":{"UpsertProfileRequest":{"type":"object","required":["first_name","last_name","scouting_role"],"properties":{"first_name":{"type":"string","maxLength":100,"minLength":1},"last_name":{"type":"string","maxLength":100,"minLength":1},"onboarding_step":{"type":"string","maxLength":100},"scouting_role":{"type":"string","enum":["group_lead_volunteer","section_team_leader","section_team_member","district_county","group_administrator","something_else"]}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developers.trooply.co.uk/models.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
