{"openapi":"3.1.0","info":{"title":"Plingit API","version":"1.0.0","description":"Svensk enkelriktad SMS-gateway för AI-agenter. Verifiera ditt nummer, mynta en nyckel, skicka SMS."},"servers":[{"url":"https://plingit.se/v1"}],"components":{"securitySchemes":{"Bearer":{"type":"http","scheme":"bearer","bearerFormat":"API Key"}},"schemas":{"VerifyStartResult":{"type":"object","properties":{"status":{"type":"string","enum":["code_sent"]},"expires_in_seconds":{"type":"integer"}},"required":["status","expires_in_seconds"]},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"needs_credit"},"message":{"type":"string"},"hint":{"type":"string"},"docs_url":{"type":"string"},"payment_url":{"type":"string"}},"required":["code","message"]}},"required":["error"]},"VerifyStartRequest":{"type":"object","properties":{"number":{"type":"string","example":"0701234567"}},"required":["number"]},"VerifyConfirmResult":{"type":"object","properties":{"api_key":{"type":"string","example":"sk_test_…"},"account_id":{"type":"string"},"free_sends_remaining":{"type":"integer"},"mode":{"type":"string","enum":["live","test"]}},"required":["api_key","account_id","free_sends_remaining","mode"]},"VerifyConfirmRequest":{"type":"object","properties":{"number":{"type":"string"},"code":{"type":"string","example":"123456"}},"required":["number","code"]},"SendResult":{"allOf":[{"$ref":"#/components/schemas/Message"},{"type":"object","properties":{"free_sends_remaining":{"type":"integer","example":9},"balance_ore":{"type":"integer","example":0},"notice":{"type":"string"},"payment_url":{"type":"string"}},"required":["free_sends_remaining","balance_ore"]}]},"Message":{"type":"object","properties":{"id":{"type":"string","example":"9b2c1f0a-…"},"to_e164":{"type":"string","example":"+46701234567"},"sender":{"type":"string","example":"PLINGIT"},"text":{"type":"string"},"segments":{"type":"integer","example":1},"status":{"type":"string","enum":["queued","sent","delivered","failed","needs_credit"],"example":"sent"},"cost_ore":{"type":"integer","example":50},"mode":{"type":"string","enum":["live","test"],"example":"test"},"created_at":{"type":"string"},"delivered_at":{"type":["string","null"]}},"required":["id","to_e164","sender","text","segments","status","cost_ore","mode","created_at"]},"NotifyRequest":{"type":"object","properties":{"text":{"type":"string","minLength":1,"example":"Bygget föll!"}},"required":["text"]},"BulkResult":{"type":"object","properties":{"accepted":{"type":"integer"},"ids":{"type":"array","items":{"type":"string"}},"rejected":{"type":"array","items":{"type":"object","properties":{"to":{"type":"string"},"error_code":{"type":"string"}},"required":["to","error_code"]}}},"required":["accepted","ids"]},"SendRequest":{"type":"object","properties":{"to":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"example":"+46701234567"},"text":{"type":"string","minLength":1},"from":{"type":"string","example":"PLINGIT"}},"required":["to","text"]},"MessageList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Message"}},"next_cursor":{"type":["string","null"]}},"required":["data","next_cursor"]},"Balance":{"type":"object","properties":{"balance_ore":{"type":"integer","example":0},"free_sends_remaining":{"type":"integer","example":10},"currency":{"type":"string","example":"SEK"}},"required":["balance_ore","free_sends_remaining","currency"]},"TopupResult":{"type":"object","properties":{"payment_url":{"type":"string","example":"https://plingit.se/topup?ref=…"}},"required":["payment_url"]},"TopupRequest":{"type":"object","properties":{"amount_ore":{"type":"integer","exclusiveMinimum":0,"example":20000,"description":"Belopp i öre (utelämna för fritt val på betalsidan)"}}}},"parameters":{}},"paths":{"/v1/verify/start":{"post":{"tags":["verify"],"summary":"Begär en verifieringskod via SMS","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyStartRequest"}}}},"responses":{"200":{"description":"Kod skickad","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyStartResult"}}}},"400":{"description":"Ogiltigt nummer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"För många försök","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/verify/confirm":{"post":{"tags":["verify"],"summary":"Bekräfta koden, skapa konto och mynta API-nyckel","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyConfirmRequest"}}}},"responses":{"200":{"description":"Konto skapat, nyckel myntad","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyConfirmResult"}}}},"400":{"description":"Ogiltigt nummer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Fel/utgången kod","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"För många försök","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/notify":{"post":{"tags":["send"],"summary":"Messa ditt eget verifierade nummer (larm-fallet)","security":[{"Bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotifyRequest"}}}},"responses":{"200":{"description":"Skickat (eller needs_credit)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendResult"}}}},"400":{"description":"Ogiltig text","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Ej autentiserad","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/messages":{"post":{"tags":["send"],"summary":"Skicka SMS till ett eller flera nummer","security":[{"Bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendRequest"}}}},"responses":{"200":{"description":"Single skickat","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendResult"}}}},"202":{"description":"Bulk accepterat","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkResult"}}}},"400":{"description":"Ogiltig begäran","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Ej autentiserad","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope saknas","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"tags":["account"],"summary":"Lista skickade meddelanden (senaste först)","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string","enum":["queued","sent","delivered","failed","needs_credit"]},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"Meddelanden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageList"}}}},"401":{"description":"Ej autentiserad","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/messages/{id}":{"get":{"tags":["account"],"summary":"Hämta ett meddelandes status","security":[{"Bearer":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Meddelande","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"401":{"description":"Ej autentiserad","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Hittas inte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/balance":{"get":{"tags":["account"],"summary":"Saldo, gratis-kvot och valuta","security":[{"Bearer":[]}],"responses":{"200":{"description":"Saldo","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Balance"}}}},"401":{"description":"Ej autentiserad","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/topup":{"post":{"tags":["account"],"summary":"Skapa en betallänk för att fylla på saldo","security":[{"Bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopupRequest"}}}},"responses":{"200":{"description":"Betallänk skapad","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopupResult"}}}},"401":{"description":"Ej autentiserad","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"webhooks":{}}