openapi: 3.0.3 info: title: 'Simetric Club API Documentation' description: 'API reference for the Simetric Club platform.' version: 1.0.0 servers: - url: 'http://localhost:8002' paths: '/api/posts/{post_slug}': get: summary: 'Get an event by its slug.' operationId: getAnEventByItsSlug description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 1 title: 'Summer Festival' slug: summer-festival content: '
Event description
' category: { } image: 'https://example.com/storage/events/summer-festival.jpg' image_2: null description: 'An outdoor music festival.' ticket_form_color: '#000000' timezone: America/Bogota currency: USD votes: user_vote_type: null likes: 0 dislikes: 0 tags: [] seat_map_config: null occupied_seats: [] assistant_fields: { } questions: [] message: Success code: 200 properties: data: type: object properties: id: type: integer example: 1 title: type: string example: 'Summer Festival' slug: type: string example: summer-festival content: type: string example: 'Event description
' category: type: object properties: { } image: type: string example: 'https://example.com/storage/events/summer-festival.jpg' image_2: type: string example: null description: type: string example: 'An outdoor music festival.' ticket_form_color: type: string example: '#000000' timezone: type: string example: America/Bogota currency: type: string example: USD votes: type: object properties: user_vote_type: type: string example: null likes: type: integer example: 0 dislikes: type: integer example: 0 tags: type: array example: [] seat_map_config: type: string example: null occupied_seats: type: array example: [] assistant_fields: type: object properties: { } questions: type: array example: [] message: type: string example: Success code: type: integer example: 200 404: description: '' content: application/json: schema: type: object example: message: 'No query results for model [App\Post].' properties: message: type: string example: 'No query results for model [App\Post].' tags: - Events parameters: - in: path name: post_slug description: 'The event slug.' example: summer-festival required: true schema: type: string '/api/posts/{post_slug}/questions': get: summary: 'List the questions configured for an event.' operationId: listTheQuestionsConfiguredForAnEvent description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 1 statement: 'What is your preferred meal?' description: 'Choose one option.' require_confirmation: false required: true only_main_assistant: true type: radio options: - Vegetarian - Regular properties: data: type: array example: - id: 1 statement: 'What is your preferred meal?' description: 'Choose one option.' require_confirmation: false required: true only_main_assistant: true type: radio options: - Vegetarian - Regular items: type: object properties: id: type: integer example: 1 statement: type: string example: 'What is your preferred meal?' description: type: string example: 'Choose one option.' require_confirmation: type: boolean example: false required: type: boolean example: true only_main_assistant: type: boolean example: true type: type: string example: radio options: type: array example: - Vegetarian - Regular items: type: string tags: - Events parameters: - in: path name: post_slug description: 'The event slug.' example: summer-festival required: true schema: type: string '/api/posts/{post_slug}/bank-accounts': get: summary: 'List the bank accounts configured for an event.' operationId: listTheBankAccountsConfiguredForAnEvent description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 1 type: bank_account identification_number: '900123456' name: 'Simetric Club' bank: 'Example Bank' account_number: '000123456789' account_type: savings email: payments@example.com image: null properties: data: type: array example: - id: 1 type: bank_account identification_number: '900123456' name: 'Simetric Club' bank: 'Example Bank' account_number: '000123456789' account_type: savings email: payments@example.com image: null items: type: object properties: id: type: integer example: 1 type: type: string example: bank_account identification_number: type: string example: '900123456' name: type: string example: 'Simetric Club' bank: type: string example: 'Example Bank' account_number: type: string example: '000123456789' account_type: type: string example: savings email: type: string example: payments@example.com image: type: string example: null tags: - Events parameters: - in: path name: post_slug description: 'The event slug.' example: summer-festival required: true schema: type: string '/api/posts/{post_slug}/ticket-types': get: summary: 'List the ticket types available for an event.' operationId: listTheTicketTypesAvailableForAnEvent description: "The endpoint is available both as an event-scoped resource and as the\nglobal `/api/ticket-types` route." parameters: - in: query name: display_disabled description: 'Include disabled ticket types. Defaults to false.' example: false required: false schema: type: boolean description: 'Include disabled ticket types. Defaults to false.' example: false nullable: false responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 1 name: 'General Admission' is_courtesy: false is_tax_included: true payment_methods: { } payment_method_commissions: { } max_availability_date: null no_require_confirmation: true min_by_sell: 1 max_by_sell: 10 per_unit: false description: 'Standard entry ticket.' tax_rate: 15 configured_amount: '100.00' amount_base: '100.00' amount_service: '0.00' amount_with_service: '100.00' amount_tax: '15.00' amount_with_tax: '115.00' amount_total: '115.00' amounts_by_payment_method: { } quantity: 100 tickets_count: 0 is_out_stock: false request_assistant_information: false all_assistants_same_price: false assistant_fields: { } questions: [] has_discounts: false addons: [] properties: data: type: array example: - id: 1 name: 'General Admission' is_courtesy: false is_tax_included: true payment_methods: [] payment_method_commissions: [] max_availability_date: null no_require_confirmation: true min_by_sell: 1 max_by_sell: 10 per_unit: false description: 'Standard entry ticket.' tax_rate: 15 configured_amount: '100.00' amount_base: '100.00' amount_service: '0.00' amount_with_service: '100.00' amount_tax: '15.00' amount_with_tax: '115.00' amount_total: '115.00' amounts_by_payment_method: [] quantity: 100 tickets_count: 0 is_out_stock: false request_assistant_information: false all_assistants_same_price: false assistant_fields: [] questions: [] has_discounts: false addons: [] items: type: object properties: id: type: integer example: 1 name: type: string example: 'General Admission' is_courtesy: type: boolean example: false is_tax_included: type: boolean example: true payment_methods: type: object properties: { } payment_method_commissions: type: object properties: { } max_availability_date: type: string example: null no_require_confirmation: type: boolean example: true min_by_sell: type: integer example: 1 max_by_sell: type: integer example: 10 per_unit: type: boolean example: false description: type: string example: 'Standard entry ticket.' tax_rate: type: integer example: 15 configured_amount: type: string example: '100.00' amount_base: type: string example: '100.00' amount_service: type: string example: '0.00' amount_with_service: type: string example: '100.00' amount_tax: type: string example: '15.00' amount_with_tax: type: string example: '115.00' amount_total: type: string example: '115.00' amounts_by_payment_method: type: object properties: { } quantity: type: integer example: 100 tickets_count: type: integer example: 0 is_out_stock: type: boolean example: false request_assistant_information: type: boolean example: false all_assistants_same_price: type: boolean example: false assistant_fields: type: object properties: { } questions: type: array example: [] has_discounts: type: boolean example: false addons: type: array example: [] tags: - 'Ticket Types' parameters: - in: path name: post_slug description: 'The event slug.' example: summer-festival required: true schema: type: string /api/ticket-types/discount: post: summary: 'Apply a discount code to a ticket type and return its calculated price.' operationId: applyADiscountCodeToATicketTypeAndReturnItsCalculatedPrice description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 1 name: 'General Admission' configured_amount: '100.00' amount_total: '90.00' has_discounts: true applied_discount: code: EARLYBIRD discount: 10 discount_unit: percentage properties: data: type: object properties: id: type: integer example: 1 name: type: string example: 'General Admission' configured_amount: type: string example: '100.00' amount_total: type: string example: '90.00' has_discounts: type: boolean example: true applied_discount: type: object properties: code: type: string example: EARLYBIRD discount: type: integer example: 10 discount_unit: type: string example: percentage 422: description: '' content: application/json: schema: type: object example: message: 'The selected ticket_type_id is invalid.' properties: message: type: string example: 'The selected ticket_type_id is invalid.' tags: - 'Ticket Types' requestBody: required: true content: application/json: schema: type: object properties: ticket_type_id: type: integer description: 'The ticket type ID.' example: 1 nullable: false discount_code: type: string description: 'The discount code to apply.' example: EARLYBIRD nullable: false required: - ticket_type_id - discount_code security: [] /api/ticket-types/preview: post: summary: 'Generate a JPEG preview image of a ticket configuration.' operationId: generateAJPEGPreviewImageOfATicketConfiguration description: "Configuration values are applied to temporary models and are not saved.\nThe response body is a binary image with `Content-Type: image/jpeg`." parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: content_type: image/jpeg properties: content_type: type: string example: image/jpeg tags: - 'Ticket Types' requestBody: required: false content: multipart/form-data: schema: type: object properties: post_id: type: integer description: 'The existing post ID used as the preview base.' example: 1 nullable: false ticket_type_id: type: integer description: 'The existing ticket type ID used as the preview base.' example: 1 nullable: false invitation_template_active: type: boolean description: 'Enable the invitation template. Defaults to true.' example: false nullable: false invitation_template_qr_inactive: type: boolean description: 'Hide the QR code. Defaults to false.' example: true nullable: false invitation_template_url: type: string description: 'The invitation template URL.' example: 'http://www.buckridge.biz/tempora-culpa-voluptatem-magnam-et-eum' nullable: false margin_top: type: number description: 'The top margin.' example: 17139805.328689 nullable: false margin_bottom: type: number description: 'The bottom margin.' example: 507.68133 nullable: false font_size: type: number description: 'The invitation font size.' example: 66919839.9568 nullable: false title_offset: type: number description: 'The title vertical offset.' example: 105.0 nullable: false font_color: type: string description: 'The invitation font color.' example: '#000000' nullable: false invitation_template_image: type: string format: binary description: 'The invitation template image.' nullable: false invitation_font_file: type: string format: binary description: 'The custom invitation font.' nullable: false security: [] /api/ticket-types: get: summary: 'List the ticket types available for an event.' operationId: listTheTicketTypesAvailableForAnEvent description: "The endpoint is available both as an event-scoped resource and as the\nglobal `/api/ticket-types` route." parameters: - in: query name: display_disabled description: 'Include disabled ticket types. Defaults to false.' example: false required: false schema: type: boolean description: 'Include disabled ticket types. Defaults to false.' example: false nullable: false responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 1 name: 'General Admission' is_courtesy: false is_tax_included: true payment_methods: { } payment_method_commissions: { } max_availability_date: null no_require_confirmation: true min_by_sell: 1 max_by_sell: 10 per_unit: false description: 'Standard entry ticket.' tax_rate: 15 configured_amount: '100.00' amount_base: '100.00' amount_service: '0.00' amount_with_service: '100.00' amount_tax: '15.00' amount_with_tax: '115.00' amount_total: '115.00' amounts_by_payment_method: { } quantity: 100 tickets_count: 0 is_out_stock: false request_assistant_information: false all_assistants_same_price: false assistant_fields: { } questions: [] has_discounts: false addons: [] properties: data: type: array example: - id: 1 name: 'General Admission' is_courtesy: false is_tax_included: true payment_methods: [] payment_method_commissions: [] max_availability_date: null no_require_confirmation: true min_by_sell: 1 max_by_sell: 10 per_unit: false description: 'Standard entry ticket.' tax_rate: 15 configured_amount: '100.00' amount_base: '100.00' amount_service: '0.00' amount_with_service: '100.00' amount_tax: '15.00' amount_with_tax: '115.00' amount_total: '115.00' amounts_by_payment_method: [] quantity: 100 tickets_count: 0 is_out_stock: false request_assistant_information: false all_assistants_same_price: false assistant_fields: [] questions: [] has_discounts: false addons: [] items: type: object properties: id: type: integer example: 1 name: type: string example: 'General Admission' is_courtesy: type: boolean example: false is_tax_included: type: boolean example: true payment_methods: type: object properties: { } payment_method_commissions: type: object properties: { } max_availability_date: type: string example: null no_require_confirmation: type: boolean example: true min_by_sell: type: integer example: 1 max_by_sell: type: integer example: 10 per_unit: type: boolean example: false description: type: string example: 'Standard entry ticket.' tax_rate: type: integer example: 15 configured_amount: type: string example: '100.00' amount_base: type: string example: '100.00' amount_service: type: string example: '0.00' amount_with_service: type: string example: '100.00' amount_tax: type: string example: '15.00' amount_with_tax: type: string example: '115.00' amount_total: type: string example: '115.00' amounts_by_payment_method: type: object properties: { } quantity: type: integer example: 100 tickets_count: type: integer example: 0 is_out_stock: type: boolean example: false request_assistant_information: type: boolean example: false all_assistants_same_price: type: boolean example: false assistant_fields: type: object properties: { } questions: type: array example: [] has_discounts: type: boolean example: false addons: type: array example: [] tags: - 'Ticket Types' security: [] '/api/posts/{post_slug}/tickets': post: summary: 'Register a ticket purchase intention for an event.' operationId: registerATicketPurchaseIntentionForAnEvent description: '' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: 'Ticket created successfully' data: order_hash: 65f1c9a7 currency: USD tickets_data: - hash: 4f2c8f2a6b8f4a3d9c8e7f6a5b4c3d2e amount: 100 amount_with_tax: 115 amount_tax: 15 amount_payment_gateway: 0 tax: 15 discounts: [] ticket_type: id: 1 name: 'General Admission' assistant: id: 1 name: 'Jane Doe' email: jane@example.com is_main: true seat_coordinate: null seat_label: null properties: message: type: string example: 'Ticket created successfully' data: type: object properties: order_hash: type: string example: 65f1c9a7 currency: type: string example: USD tickets_data: type: array example: - hash: 4f2c8f2a6b8f4a3d9c8e7f6a5b4c3d2e amount: 100 amount_with_tax: 115 amount_tax: 15 amount_payment_gateway: 0 tax: 15 discounts: [] ticket_type: id: 1 name: 'General Admission' assistant: id: 1 name: 'Jane Doe' email: jane@example.com is_main: true seat_coordinate: null seat_label: null items: type: object properties: hash: type: string example: 4f2c8f2a6b8f4a3d9c8e7f6a5b4c3d2e amount: type: integer example: 100 amount_with_tax: type: integer example: 115 amount_tax: type: integer example: 15 amount_payment_gateway: type: integer example: 0 tax: type: integer example: 15 discounts: type: array example: [] ticket_type: type: object properties: id: type: integer example: 1 name: type: string example: 'General Admission' assistant: type: object properties: id: type: integer example: 1 name: type: string example: 'Jane Doe' email: type: string example: jane@example.com is_main: type: boolean example: true seat_coordinate: type: string example: null seat_label: type: string example: null 422: description: '' content: application/json: schema: type: object example: message: 'Aforo máximo alcanzado para la localidad General Admission. Por favor, elige otra localidad o reduce la cantidad de tickets.' properties: message: type: string example: 'Aforo máximo alcanzado para la localidad General Admission. Por favor, elige otra localidad o reduce la cantidad de tickets.' tags: - Vouchers requestBody: required: true content: multipart/form-data: schema: type: object properties: assistant: type: object description: 'Payment method and voucher information. Example payload: payment_method=voucher' example: [] nullable: false properties: payment_method: type: string description: 'Payment method.' example: voucher nullable: false skip_otp: type: boolean description: 'Skip OTP generation.' example: false nullable: false voucher: type: string format: binary description: 'Required when the payment method is voucher. JPEG, PNG, or JPG proof of payment.' nullable: false adds_accepted: type: boolean description: 'Whether addons or additional terms were accepted.' example: true nullable: false require_tax: type: boolean description: 'Whether tax is required.' example: true nullable: false tickets: type: array description: 'Ticket selections and attendee information.' example: [] items: type: object properties: is_main: type: boolean description: 'Whether this attendee is the main assistant.' example: true nullable: false ticket_type_id: type: integer description: 'Ticket type ID.' example: 1 nullable: false quantity: type: integer description: 'Quantity for this ticket type.' example: 1 nullable: false discount_code: type: string description: 'Discount code for this ticket type.' example: EARLYBIRD nullable: false name: type: string description: 'Attendee name.' example: 'Jane Doe' nullable: false email: type: string description: 'Attendee email.' example: jane@example.com nullable: false phone: type: string description: 'Attendee phone number.' example: '+593999999999' nullable: false identification_number: type: string description: 'Attendee identification number.' example: '0912345678' nullable: false answers: type: object description: 'Answers keyed by question ID.' example: 1: Vegetarian 2: 'No' nullable: false properties: { } seats: type: array description: 'Selected seats.' example: [] items: type: object properties: ticket_type_id: type: integer description: 'Ticket type ID for the selected seat.' example: 1 nullable: false coordinate: type: string description: 'Seat coordinate.' example: A-01 nullable: false label: type: string description: 'Seat label.' example: A1 nullable: false required: - coordinate - label addons: type: array description: 'Addons selected for the ticket type.' example: [] items: type: object properties: ticket_type_id: type: integer description: 'Ticket type ID for the addon.' example: 1 nullable: false id: type: integer description: 'Addon ID.' example: 1 nullable: false quantity: type: integer description: 'Addon quantity.' example: 1 nullable: false required: - name - email - phone - identification_number invoice_data: type: object description: 'Invoice information. Example payload: name=Jane Doe, identification_number=0999999999001, email=billing@example.com' example: [] nullable: false properties: name: type: string description: 'Invoice recipient name.' example: 'Jane Doe' nullable: false identification_type: type: string description: 'Invoice recipient identification type.' example: '05' nullable: false identification_number: type: string description: 'Invoice recipient identification number.' example: '0999999999001' nullable: false address: type: string description: 'Invoice recipient address.' example: '123 Main Street' nullable: false email: type: string description: 'Invoice recipient email.' example: billing@example.com nullable: false phone: type: string description: 'Invoice recipient phone number.' example: '+593999999999' nullable: false required: - assistant - tickets parameters: - in: path name: post_slug description: 'The event slug.' example: summer-festival required: true schema: type: string '/api/posts/vouchers/{voucher_hash}/send-mail': put: summary: 'Send the voucher invitations by email.' operationId: sendTheVoucherInvitationsByEmail description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: 'Mail sent successfully' properties: message: type: string example: 'Mail sent successfully' 500: description: '' content: application/json: schema: type: object example: message: 'An error occurred while sending the mail.' properties: message: type: string example: 'An error occurred while sending the mail.' tags: - Vouchers parameters: - in: path name: voucher_hash description: 'The voucher hash.' example: 4f2c8f2a6b8f4a3d9c8e7f6a5b4c3d2e required: true schema: type: string '/api/posts/vouchers/{voucher_hash}/otp-validate': put: summary: 'Validate the OTP associated with a voucher.' operationId: validateTheOTPAssociatedWithAVoucher description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: 'OTP validated successfully' data: order_hash: 4f2c8f2a6b8f4a3d9c8e7f6a5b4c3d2e currency: USD event_name: 'Summer Festival' payment_data: method: voucher tickets_data: [] addons: [] properties: message: type: string example: 'OTP validated successfully' data: type: object properties: order_hash: type: string example: 4f2c8f2a6b8f4a3d9c8e7f6a5b4c3d2e currency: type: string example: USD event_name: type: string example: 'Summer Festival' payment_data: type: object properties: method: type: string example: voucher tickets_data: type: array example: [] addons: type: array example: [] 400: description: '' content: application/json: schema: type: object example: message: 'The OTP entered is invalid.' properties: message: type: string example: 'The OTP entered is invalid.' tags: - Vouchers requestBody: required: true content: application/json: schema: type: object properties: otp: type: string description: 'The six-digit OTP.' example: '123456' nullable: false required: - otp parameters: - in: path name: voucher_hash description: 'The voucher hash.' example: 4f2c8f2a6b8f4a3d9c8e7f6a5b4c3d2e required: true schema: type: string '/api/posts/vouchers/{voucher_hash}/retry-otp': put: summary: 'Resend the OTP associated with a voucher.' operationId: resendTheOTPAssociatedWithAVoucher description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: 'OTP resent successfully' properties: message: type: string example: 'OTP resent successfully' tags: - Vouchers parameters: - in: path name: voucher_hash description: 'The voucher hash.' example: 4f2c8f2a6b8f4a3d9c8e7f6a5b4c3d2e required: true schema: type: string tags: - name: Events description: '' - name: 'Ticket Types' description: '' - name: Vouchers description: '' components: securitySchemes: default: type: http scheme: bearer description: 'Create an API token from the developer dashboard and send it as a bearer token.' security: - default: []