/** Type-safe interfaces for the AgentForms API. */
/** Supported field types. */
export type FieldType =
| 'text'
| 'email'
| 'tel'
| 'textarea'
| 'select'
| 'number'
| 'date'
| 'hidden';
/** Permissions assignable to an API key. */
export type Permission =
| 'read_forms'
| 'write_forms'
| 'read_submissions'
| 'delete_forms';
/** Single form field definition. */
export interface FieldDefinition {
name: string;
label: string;
type: FieldType;
required?: boolean;
options?: string[];
placeholder?: string;
default?: string;
}
/** Full form returned from the API. */
export interface Form {
id: number;
token: string;
name: string;
fields: FieldDefinition[];
created_by: string;
embed_url: string;
submit_url: string;
created_at?: string;
field_count?: number;
metadata?: Record<string, unknown>;
/** Public URL for humans to fill out the form. */
readonly public_url: string;
/** Short share link for messaging. */
readonly share_url: string;
}
/** Single submission record. */
export interface Submission {
id: number;
site_id: number;
submitted_at: string;
dynamic_data: Record<string, unknown>;
client_ip?: string;
user_agent?: string;
}
/** Response from forms.list(). */
export interface FormsResponse {
forms: Form[];
total?: number;
limit?: number;
offset?: number;
}
/** API key representation. */
export interface ApiKey {
id: number;
key_prefix: string;
name: string;
permissions?: Record<string, boolean>;
created_at?: string;
revoked: boolean;
}
/** Response from keys.list(). */
export interface KeysResponse {
keys: ApiKey[];
}
/** Incoming webhook payload from AgentForms. */
export interface WebhookPayload {
event: string;
site_id: number;
site_name: string;
submission_id: number;
submitted_at: string;
fields: Record<string, string>;
field_metadata?: Record<string, unknown>;
}
/** Response from submissions.list(). */
export interface SubmissionsResponse {
submissions: Submission[];
total?: number;
limit?: number;
offset?: number;
}