{"note":"OpenAPI conversion -- returning structured metadata","name":"sms77-io","description":"seven","version":"1.0.0","base_url":"https://gateway.seven.io/api","endpoints":51,"raw":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api seven\n@base https://gateway.seven.io/api\n@version 1.0.0\n@auth OAuth2\n@endpoints 51\n@hint download_for_search\n@toc analytics(4), balance(1), contacts(5), groups(5), hooks(3), journal(4), lookup(5), numbers(6), pricing(1), rcs(3), sms(2), status(1), subaccounts(5), validate_for_voice(1), voice(2), waba(3)\n\n@group analytics\n@endpoint GET /analytics/country\n@desc Get Analytics By Country\n@optional {end: str # End date of the statistics. Defaults to the current day., label: str # Shows only data of a specific label., start: str # Start date of the statistics in the format YYYY-MM-DD. By default, the date of 30 days ago is set., subaccounts: str # Receive the data only for the main account, all your (sub-)accounts or only for specific subaccounts.}\n@returns(200) OK\n\n@endpoint GET /analytics/date\n@desc Get Analytics By Date\n@optional {end: str # End date of the statistics. Defaults to the current day., label: str # Shows only data of a specific label., start: str # Start date of the statistics in the format YYYY-MM-DD. By default, the date of 30 days ago is set., subaccounts: str # Receive the data only for the main account, all your (sub-)accounts or only for specific subaccounts.}\n@returns(200) OK\n\n@endpoint GET /analytics/label\n@desc Get Analytics By Label\n@optional {end: str # End date of the statistics. Defaults to the current day., label: str # Shows only data of a specific label., start: str # Start date of the statistics in the format YYYY-MM-DD. By default, the date of 30 days ago is set., subaccounts: str # Receive the data only for the main account, all your (sub-)accounts or only for specific subaccounts.}\n@returns(200) OK\n\n@endpoint GET /analytics/subaccount\n@desc Get Analytics By Label\n@optional {end: str # End date of the statistics. Defaults to the current day., label: str # Shows only data of a specific label., start: str # Start date of the statistics in the format YYYY-MM-DD. By default, the date of 30 days ago is set., subaccounts: str # Receive the data only for the main account, all your (sub-)accounts or only for specific subaccounts.}\n@returns(200) OK\n\n@endgroup\n\n@group balance\n@endpoint GET /balance\n@desc Get Balance\n@returns(200) {amount: num(float), currency: str} # OK\n\n@endgroup\n\n@group contacts\n@endpoint GET /contacts\n@desc List Contacts\n@returns(200) {data: [map], pagingMetadata: map{offset: int, count: int, total: int, limit: int, has_more: bool}} # OK\n\n@endpoint POST /contacts\n@desc Create Contact\n@returns(200) {id: int(int32), avatar: str, validation: map{state: str, timestamp: str}, initials: map{initials: str, color: str}, properties: map{firstname: str, lastname: str, mobile_number: int(int64), home_number: str, email: str, address: str, postal_code: str, city: str, birthday: str(date), notes: str}, groups: [int], created: str} # OK\n\n@endpoint DELETE /contacts/{id}\n@desc Delete Contact\n@required {id: str # The ID of the contact for deletion.}\n@returns(200) {error: str, success: bool} # OK\n\n@endpoint GET /contacts/{id}\n@desc Get Contact\n@required {id: str # The ID of the contact for retrieval.}\n@returns(200) {id: int(int32), avatar: str, validation: map{state: str, timestamp: str}, initials: map{initials: str, color: str}, properties: map{firstname: str, lastname: str, mobile_number: int(int64), home_number: str, email: str, address: str, postal_code: str, city: str, birthday: str(date), notes: str}, groups: [int], created: str} # OK\n\n@endpoint PATCH /contacts/{id}\n@desc Update Contact\n@required {id: str # The ID of the contact for deletion.}\n@returns(200) {id: int(int32), avatar: str, validation: map{state: str, timestamp: str}, initials: map{initials: str, color: str}, properties: map{firstname: str, lastname: str, mobile_number: int(int64), home_number: str, email: str, address: str, postal_code: str, city: str, birthday: str(date), notes: str}, groups: [int], created: str} # OK\n\n@endgroup\n\n@group groups\n@endpoint GET /groups\n@desc List Groups\n@returns(200) {data: [map], pagingMetadata: map{offset: int, count: int, total: int, limit: int, has_more: bool}} # OK\n\n@endpoint POST /groups\n@desc Create Group\n@returns(200) {id: int, name: str, members_count: int, has_more: bool} # OK\n\n@endpoint DELETE /groups/{id}\n@desc Delete Group\n@required {id: str # The ID of the group for deletion.}\n@returns(200) {success: bool} # OK\n\n@endpoint GET /groups/{id}\n@desc Get Group\n@required {id: int # The ID of the group for retrieval.}\n@returns(200) {id: int, name: str, members_count: int, has_more: bool} # OK\n\n@endpoint PATCH /groups/{id}\n@desc Update Group\n@required {id: int # The ID of the group for updating.}\n@returns(200) {id: int, name: str, members_count: int, has_more: bool} # OK\n\n@endgroup\n\n@group hooks\n@endpoint DELETE /hooks\n@desc Delete Hook\n@returns(200) {code: str, error_message: str, id: int, success: bool} # OK\n\n@endpoint GET /hooks\n@desc List Hooks\n@returns(200) {data: [map]} # OK\n\n@endpoint POST /hooks\n@desc Create Hook\n@returns(200) {code: str, error_message: str, id: int, success: bool} # OK\n\n@endgroup\n\n@group journal\n@endpoint GET /journal/outbound\n@desc Get outbound messages\n@optional {id: int # The ID of a message, date_from: str # A start date from which the search should start, date_to: str # An end date up to which the search is to be performed, to: str # The receivers phone number in any format., state: str # The status of the message. - could be e.g. completed / failed for Voice or DELIVERED / NOTDELIVERED etc. for SMS, limit: int # Limits the number of entries to be returned., offset: int # Starting point from which entries are to be queried.}\n@returns(200) OK\n\n@endpoint GET /journal/inbound\n@desc Get inbound messages\n@optional {id: int # The ID of a message, date_from: str # A start date from which the search should start, date_to: str # An end date up to which the search is to be performed, to: str # The receivers phone number in any format., state: str # The status of the message. - could be e.g. completed / failed for Voice or DELIVERED / NOTDELIVERED etc. for SMS, limit: int # Limits the number of entries to be returned., offset: int # Starting point from which entries are to be queried.}\n@returns(200) OK\n\n@endpoint GET /journal/replies\n@desc Get message replies\n@optional {id: int # The ID of a message, date_from: str # A start date from which the search should start, date_to: str # An end date up to which the search is to be performed, to: str # The receivers phone number in any format., state: str # The status of the message. - could be e.g. completed / failed for Voice or DELIVERED / NOTDELIVERED etc. for SMS, limit: int # Limits the number of entries to be returned., offset: int # Starting point from which entries are to be queried.}\n@returns(200) OK\n\n@endpoint GET /journal/voice\n@desc Get voice journal\n@optional {id: int # The ID of a message, date_from: str # A start date from which the search should start, date_to: str # An end date up to which the search is to be performed, to: str # The receivers phone number in any format., state: str # The status of the message. - could be e.g. completed / failed for Voice or DELIVERED / NOTDELIVERED etc. for SMS, limit: int # Limits the number of entries to be returned., offset: int # Starting point from which entries are to be queried.}\n@returns(200) OK\n\n@endgroup\n\n@group lookup\n@endpoint GET /lookup/cnam\n@desc Lookup Caller Name\n@required {number: str # The phone number to look up}\n@returns(200) {code: num, success: str, name: str, number: str} # OK\n\n@endpoint GET /lookup/format\n@desc Lookup Format\n@required {number: str # The phone number to look up}\n@returns(200) {success: bool, international: str, international_formatted: str, national: str, country_iso: str, country_name: str, country_code: str} # OK\n\n@endpoint GET /lookup/hlr\n@desc Lookup HLR\n@required {number: str # The phone number to look up}\n@returns(200) {international_formatted: str, country_name: str, country_code: str, international_format_number: str, national_format_number: str, country_prefix: str, current_carrier: map{network_code: str, name: str, country: str, network_type: str}, original_carrier: map{network_code: str, name: str, country: str, network_type: str}, lookup_outcome: str, lookup_outcome_message: str, valid_number: str, reachable: str, roaming: map{status: str, roaming_country_code: str, roaming_network_code: str, roaming_network_name: str}} # OK\n\n@endpoint GET /lookup/mnp\n@desc Lookup MNP\n@required {number: str # The phone number to look up}\n@returns(200) {code: num, success: bool, price: num(float), mnp: map{country: str, number: str, national_format: str, international_formatted: str, network: str, mccmnc: str, isPorted: bool, network_type: str}} # OK\n\n@endpoint GET /lookup/rcs\n@desc Lookup RCS Capabilities\n@required {number: str # The phone number to look up}\n@returns(200) OK\n\n@endgroup\n\n@group numbers\n@endpoint GET /numbers/active\n@desc List Active Numbers\n@returns(200) {activeNumbers: [map]} # OK\n\n@endpoint DELETE /numbers/active/{number}\n@desc Delete Number\n@required {number: str # The phone number to delete.}\n@returns(200) {success: bool} # OK\n\n@endpoint GET /numbers/active/{number}\n@desc Get Number\n@required {number: str # The phone number to retrieve.}\n@returns(200) {country: str, number: str, friendly_name: str, billing: map{fees: map{setup: num, basic_charge: num, sms_mo: int(int32), voice_mo: int(int32)}, payment_interval: str}, features: map{sms: bool, a2p_sms: bool, voice: bool}, forward_sms_mo: map{sms: map{number: str, enabled: bool}, email: map{address: [str], enabled: bool}, slack: map{uri: str, enabled: bool}}, expires: str, created: str} # OK\n\n@endpoint PATCH /numbers/active/{number}\n@desc Update Number\n@required {number: str # The phone number to update details for.}\n@returns(200) {country: str, number: str, friendly_name: str, billing: map{fees: map{setup: num, basic_charge: num, sms_mo: int(int32), voice_mo: int(int32)}, payment_interval: str}, features: map{sms: bool, a2p_sms: bool, voice: bool}, forward_sms_mo: map{sms: map{number: str, enabled: bool}, email: map{address: [str], enabled: bool}, slack: map{uri: str, enabled: bool}}, expires: str, created: str} # OK\n\n@endpoint GET /numbers/available\n@desc Get Available Numbers\n@optional {country: str # The ISO 3166-1 alpha-2 country code of the country to search for available numbers in., features_sms: bool # If set to true, only numbers that support SMS will be returned., features_a2p_sms: bool # If set to true, only numbers that support A2P SMS will be returned., features_voice: bool # If set to true, only numbers that support voice will be returned.}\n@returns(200) {availableNumbers: [map]} # OK\n\n@endpoint POST /numbers/order\n@desc Order Number\n@returns(200) {error: str, success: bool} # OK\n\n@endgroup\n\n@group pricing\n@endpoint GET /pricing\n@desc Get Pricing\n@optional {country: str # The countries ISO code to get pricing for. Example values are \"de\" for Germany or \"fr\" for France. Omit to show pricing for all channels.}\n@returns(200) {countCountries: int, countNetworks: int, countries: [map]} # OK\n\n@endgroup\n\n@group rcs\n@endpoint POST /rcs/events\n@desc Trigger RCS Event\n@returns(200) {success: bool} # OK\n\n@endpoint POST /rcs/messages\n@desc Send RCS\n@returns(200) {balance: num, debug: str, messages: [map], sms_type: str, success: str, total_price: num} # Success\n\n@endpoint DELETE /rcs/messages/{id}\n@desc Delete RCS\n@required {id: str # The message ID for deletion}\n@returns(200) {success: bool} # OK\n\n@endgroup\n\n@group sms\n@endpoint DELETE /sms\n@desc Delete Sms\n@returns(200) {deleted: [int], success: bool} # Success\n\n@endpoint POST /sms\n@desc Send Sms\n@returns(200) {balance: num, debug: str, messages: [map], sms_type: str, success: str, total_price: num} # Success\n\n@endgroup\n\n@group status\n@endpoint GET /status\n@desc Get SMS Status\n@required {msg_id: str # A comma separated list of SMS IDs to check}\n@returns(200) Success\n\n@endgroup\n\n@group subaccounts\n@endpoint GET /subaccounts/list\n@desc List Subaccounts\n@optional {id: str # The ID of a subaccount. This will give you only the data for a specific subaccount.}\n@returns(200) OK\n\n@endpoint POST /subaccounts/create\n@desc Create Subaccount\n@returns(200) {error: str, subaccount: map{id: str, username: str, company: str, balance: str, total_usage: str, auto_topup: map{amount: str, threshold: str}, contact: map{email: str, name: str}}, success: bool} # OK\n\n@endpoint POST /subaccounts/update\n@desc Automatic Balance Transfer\n@returns(200) {error: str, success: bool} # OK\n\n@endpoint POST /subaccounts/transfer_credits\n@desc Manual Credit Transfer\n@returns(200) {error: str, success: bool} # OK\n\n@endpoint POST /subaccounts/delete\n@desc Delete Subaccount\n@returns(200) {error: str, success: bool} # OK\n\n@endgroup\n\n@group validate_for_voice\n@endpoint POST /validate_for_voice\n@desc Validate Caller ID for Voice\n@returns(200) Success\n\n@endgroup\n\n@group voice\n@endpoint POST /voice\n@desc Send text-to-speech Voice Call\n@returns(200) Success\n\n@endpoint POST /voice/{call_id}/hangup\n@desc End Voice Call\n@required {call_id: str # The ID of the call to be ended}\n@returns(200) {error: str, success: bool} # Success\n\n@endgroup\n\n@group waba\n@endpoint POST /waba/messages\n@desc Send WhatsApp Message\n@required {from: str # The WhatsApp sender number., to: str # The recipient phone number.}\n@optional {type: str(template/text/image/video/audio/document/sticker/location/contacts/interactive) # The message type. Required for structured messages. Omit for simple freetext messages using the \"text\" parameter., template: str # The template name. Required when type is \"template\"., language: str # The language code for the template (e.g. \"de\", \"en\"). Required when type is \"template\"., text: str # The free text message content. Used for non-template messages within an active conversation., delay: str # Date/Time for delayed dispatch - expects a date time like \"2026-02-10 09:00:00\" or a Unix timestamp., label: str # A custom label for sorting analytics., foreign_id: str # Identifier to return in callbacks for status reports etc., ttl: int # Time to live in minutes for the message., performance_tracking: bool=false # Enable performance tracking for found URLs., components: map{header: [str], body: [str], buttons: [map]} # Template components for parameter substitution. Values are positional and replace {{1}}, {{2}}, etc. in the template., url: str # Public URL of the media file. Required for image, video, audio, document, and sticker types., caption: str # Caption for the media file. Optional for image, video, and document types., filename: str # Filename for the document. Required when type is \"document\"., latitude: num(double) # Latitude of the location. Required when type is \"location\"., longitude: num(double) # Longitude of the location. Required when type is \"location\"., name: str # Name of the location. Optional when type is \"location\"., address: str # Address of the location. Optional when type is \"location\"., contacts: [map{name!: map, phones!: [map]}] # Contact cards to send. Required when type is \"contacts\"., interactive_type: str(button/list) # Sub-type for interactive messages. Required when type is \"interactive\"., body: str # Body text for interactive messages., header: str # Header text for interactive messages., footer: str # Footer text for interactive messages., buttons: [map{id!: str, title!: str}] # Buttons for interactive button messages. Max 3 buttons., button_text: str # Button text for interactive list messages., sections: [map{title!: str, rows!: [map]}] # Sections for interactive list messages.}\n@returns(200) {success: str, total_price: num, balance: num, debug: str, sms_type: str, messages: [map]} # OK\n@errors {400: Bad Request}\n\n@endpoint DELETE /waba/messages/{id}\n@desc Delete WhatsApp Message\n@required {id: str # The ID of the message to delete.}\n@returns(200) {success: bool} # OK\n@errors {400: Bad Request, 404: Not Found}\n\n@endpoint POST /waba/events\n@desc Trigger WhatsApp Event\n@required {event: str(read/is_typing/reaction) # The event type to trigger.}\n@optional {from: str # The WhatsApp sender number. Not used for reaction events., to: str # The recipient phone number. Not used for reaction events. At least one of \"to\" or \"msg_id\" must be provided., msg_id: str # The ID of the message to which the event refers. At least one of \"to\" or \"msg_id\" must be provided., message_id: str # The ID of the message to react to. Required when event is \"reaction\"., emoji: str # Emoji for the reaction. Required when event is \"reaction\".}\n@returns(200) {success: bool} # OK\n@errors {400: Bad Request}\n\n@endgroup\n\n@end\n"}