{"openapi": "3.0.3", "info": {"title": "AryaSend API", "version": "1.0.0", "description": "Email sending, contacts, domains and suppression. EU/German data residency."}, "servers": [{"url": "https://api.aryasend.com/v1"}], "security": [{"bearerAuth": []}], "components": {"securitySchemes": {"bearerAuth": {"type": "http", "scheme": "bearer", "description": "Your API key: `Authorization: Bearer ask_\u2026`."}}, "schemas": {"Message": {"type": "object", "properties": {"id": {"type": "integer"}, "pool": {"type": "string", "enum": ["transactional", "bulk", "free"]}, "from_email": {"type": "string", "format": "email"}, "to_email": {"type": "string", "format": "email"}, "subject": {"type": "string"}, "status": {"type": "string", "enum": ["queued", "sending", "sent", "deferred", "failed"]}, "error": {"type": "string", "nullable": true}, "created_at": {"type": "string", "format": "date-time"}}}, "Contact": {"type": "object", "properties": {"id": {"type": "integer"}, "email": {"type": "string", "format": "email"}, "first_name": {"type": "string"}, "last_name": {"type": "string"}, "status": {"type": "string", "enum": ["active", "pending", "unsubscribed", "bounced"]}, "attributes": {"type": "object", "additionalProperties": true}, "lists": {"type": "array", "items": {"type": "string"}}}}}}, "paths": {"/send": {"post": {"summary": "Send a message", "operationId": "send", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["from_email", "to", "subject"], "properties": {"from_email": {"type": "string", "format": "email"}, "to": {"type": "string", "format": "email"}, "subject": {"type": "string"}, "html": {"type": "string"}, "text": {"type": "string"}}}}}}, "responses": {"202": {"description": "Accepted", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}}, "400": {"description": "Invalid request"}}}}, "/messages/": {"get": {"summary": "List messages", "operationId": "listMessages", "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "array", "items": {"$ref": "#/components/schemas/Message"}}}}}}}}, "/messages/{id}/": {"get": {"summary": "Get a message", "operationId": "getMessage", "parameters": [{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}}, "404": {"description": "Not found"}}}}, "/contacts": {"get": {"summary": "List / search contacts", "operationId": "listContacts", "parameters": [{"name": "q", "in": "query", "schema": {"type": "string"}}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "array", "items": {"$ref": "#/components/schemas/Contact"}}}}}}}, "post": {"summary": "Upsert a contact", "operationId": "upsertContact", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["email"], "properties": {"email": {"type": "string", "format": "email"}, "first_name": {"type": "string"}, "last_name": {"type": "string"}, "status": {"type": "string"}, "attributes": {"type": "object", "additionalProperties": true}, "list": {"type": "string", "description": "List name or id (also accepts `lists`: array)"}}}}}}, "responses": {"200": {"description": "Updated"}, "201": {"description": "Created"}}}}, "/contacts/batch": {"post": {"summary": "Bulk upsert contacts (\u22642000)", "operationId": "batchContacts", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["contacts"], "properties": {"contacts": {"type": "array", "items": {"$ref": "#/components/schemas/Contact"}}, "list": {"type": "string"}}}}}}, "responses": {"200": {"description": "Upserted counts"}}}}, "/events": {"post": {"summary": "Track a product event (drives automations + revenue attribution)", "operationId": "trackEvent", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["email", "name"], "properties": {"email": {"type": "string", "format": "email"}, "name": {"type": "string", "description": "e.g. purchase, signup"}, "value": {"type": "number", "description": "monetary value \u2192 a conversion"}, "currency": {"type": "string", "default": "EUR"}, "properties": {"type": "object", "additionalProperties": true}}}}}}, "responses": {"201": {"description": "Recorded"}}}}, "/domains/": {"get": {"summary": "List sending domains", "operationId": "listDomains", "responses": {"200": {"description": "OK"}}}, "post": {"summary": "Add a sending domain (returns DNS to publish)", "operationId": "addDomain", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["domain"], "properties": {"domain": {"type": "string"}}}}}}, "responses": {"201": {"description": "Created"}}}}, "/suppressions/": {"get": {"summary": "List suppressions", "operationId": "listSuppressions", "responses": {"200": {"description": "OK"}}}, "post": {"summary": "Suppress an address", "operationId": "addSuppression", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["email"], "properties": {"email": {"type": "string", "format": "email"}, "reason": {"type": "string"}}}}}}, "responses": {"201": {"description": "Created"}}}}}}