{
    "info": {
        "description": "External API for changing tickets, including scanning and checking in event attendees.",
        "title": "Talque Ticket Webhook API",
        "version": "1.0.0"
    },
    "paths": {
        "/webhook/org/{orgId}/ticket/scan/check-in": {
            "post": {
                "summary": "Check in an attendee via ticket QR code",
                "description": "Decodes a scanned ticket QR code and records the check-in for the attendee.",
                "parameters": [
                    {
                        "name": "orgId",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "The unique identifier of the organization."
                    },
                    {
                        "name": "X-TQ-CLIENT-ID",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "The API client ID for authentication."
                    },
                    {
                        "name": "X-TQ-SECRET",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "The API client secret for authentication."
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "code": {
                                        "type": "string",
                                        "description": "The scanned QR code string from the attendee ticket."
                                    },
                                    "direction": {
                                        "type": "string",
                                        "enum": [
                                            "ENTER",
                                            "EXIT"
                                        ],
                                        "description": "Check-in direction. Defaults to ENTER."
                                    }
                                },
                                "required": [
                                    "code"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Check-in recorded successfully.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "description": "Whether the check-in was successful."
                                        },
                                        "reason": {
                                            "type": "string",
                                            "description": "Result reason code (e.g. SUCCESS, NOT_FOUND, ALREADY_CHECKED_IN)."
                                        },
                                        "reasonEnum": {
                                            "type": "string",
                                            "description": "Name of the reason enum class."
                                        },
                                        "ticket": {
                                            "type": "object",
                                            "properties": {
                                                "ticketId": {
                                                    "type": "string",
                                                    "description": "The unique ticket identifier."
                                                },
                                                "holder": {
                                                    "type": "object",
                                                    "properties": {
                                                        "email": {
                                                            "type": "string",
                                                            "format": "email",
                                                            "description": "Email address of the ticket holder."
                                                        },
                                                        "firstName": {
                                                            "type": "string",
                                                            "nullable": true,
                                                            "description": "First name of the ticket holder."
                                                        },
                                                        "lastName": {
                                                            "type": "string",
                                                            "nullable": true,
                                                            "description": "Last name of the ticket holder."
                                                        },
                                                        "companyName": {
                                                            "type": "string",
                                                            "nullable": true,
                                                            "description": "Company name of the ticket holder."
                                                        },
                                                        "jobTitle": {
                                                            "type": "string",
                                                            "nullable": true,
                                                            "description": "Job title of the ticket holder."
                                                        },
                                                        "extUserId": {
                                                            "type": "string",
                                                            "nullable": true,
                                                            "description": "External user identifier, if any."
                                                        },
                                                        "locale": {
                                                            "type": "string",
                                                            "nullable": true,
                                                            "description": "Preferred locale of the ticket holder."
                                                        }
                                                    },
                                                    "required": [
                                                        "email"
                                                    ],
                                                    "description": "The person holding this ticket."
                                                },
                                                "categories": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string"
                                                    },
                                                    "description": "Category identifiers assigned to this ticket."
                                                },
                                                "provider": {
                                                    "type": "string",
                                                    "description": "The ticketing provider (e.g. INTERNAL)."
                                                }
                                            },
                                            "required": [
                                                "ticketId",
                                                "holder"
                                            ],
                                            "description": "The checked-in ticket."
                                        },
                                        "profile": {
                                            "type": "object",
                                            "nullable": true,
                                            "description": "The attendee profile, if one exists for this ticket holder."
                                        },
                                        "categories": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "category": {
                                                        "type": "string",
                                                        "description": "The category identifier."
                                                    },
                                                    "parent": {
                                                        "type": "string",
                                                        "nullable": true,
                                                        "description": "The parent category identifier, if any."
                                                    },
                                                    "name": {
                                                        "$schema": "http://json-schema.org/draft-04/schema",
                                                        "type": "object",
                                                        "properties": {
                                                            "DE_DE": {
                                                                "type": "string"
                                                            },
                                                            "EN_US": {
                                                                "type": "string"
                                                            },
                                                            "FR_FR": {
                                                                "type": "string"
                                                            },
                                                            "ES_ES": {
                                                                "type": "string"
                                                            },
                                                            "PT_PT": {
                                                                "type": "string"
                                                            },
                                                            "ZH_CN": {
                                                                "type": "string"
                                                            },
                                                            "UK_UA": {
                                                                "type": "string"
                                                            },
                                                            "AR_EG": {
                                                                "type": "string"
                                                            },
                                                            "RU_RU": {
                                                                "type": "string"
                                                            },
                                                            "FA_IR": {
                                                                "type": "string"
                                                            },
                                                            "NL_NL": {
                                                                "type": "string"
                                                            }
                                                        },
                                                        "additionalProperties": false,
                                                        "description": "Translated display name of the category."
                                                    }
                                                },
                                                "required": [
                                                    "category",
                                                    "parent",
                                                    "name"
                                                ]
                                            },
                                            "description": "Visible (non-private) categories for this attendee, with all name translations."
                                        },
                                        "dailyCount": {
                                            "type": "integer",
                                            "description": "Number of check-ins for this attendee today."
                                        },
                                        "profileConnect": {
                                            "type": "string",
                                            "nullable": true,
                                            "description": "A URL for connecting with this attendee (QR code link), if available."
                                        },
                                        "atime": {
                                            "type": "integer",
                                            "description": "Unix timestamp of the check-in."
                                        }
                                    },
                                    "required": [
                                        "success",
                                        "reason",
                                        "reasonEnum",
                                        "ticket",
                                        "dailyCount",
                                        "atime"
                                    ]
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Bad request. Reason codes: CODE_INVALID (unparseable QR code), CODE_EXPIRED (QR code has expired), ORG_MISMATCH (ticket belongs to a different organization)."
                    },
                    "403": {
                        "description": "Forbidden. Reason codes: TICKET_CANCELED (ticket has been canceled), ALREADY_CHECKED_IN (attendee has already checked in)."
                    },
                    "404": {
                        "description": "Ticket not found."
                    }
                }
            }
        }
    },
    "openapi": "3.0.3"
}