Skip to content
Esc
  • OverviewGuidesWhat exists today, and where to start.
  • QuickstartGuidesKey, domain, first send — in that order.
  • AuthenticationGuidesBearer keys, the mandatory User-Agent, and what each refusal means.
  • ErrorsGuidesThe whole vocabulary, with the status each name carries.
  • IdempotencyGuidesRetry a send without sending it twice.
  • PaginationGuidesCursors are item IDs, not page numbers.
  • Rate limitsGuidesTen a second per team, and the headers that tell you where you are.
  • Sending newslettersGuidesUse a campaign, or include an unsubscribe link.
  • EventsGuidesEvery event a webhook can carry, with one real payload each.
  • DomainsGuidesThe records, where they go at each registrar, and what the page does while you wait.
  • TrackingGuidesOpens and clicks: one record, two toggles, and what an open really means.
  • Sign-up formsGuidesPop-ups and embedded forms on your site, and the rules that pick one.
  • Website trackingGuidesrasket.js on your own site: the snippet, consent, three events and the check.
  • TemplatesGuidesFifty-seven starters sorted by goal, and how to keep a campaign as a template.
  • ReceivingGuidesInbound mail, and the Inbox: a webhook fires, you read it, you answer it.
  • InboxGuidesChannels, personal mailboxes and seats: who sees what, and where a reply goes.
  • Mail appsGuidesComing soon: your Rasket address in Apple Mail, Outlook and the Gmail app.
  • Inbox APIGuidesOpen, read and answer support conversations from your app, with the same key.
  • Support inbox in your appGuidesA Contact us form that opens a conversation your team answers, in five minutes.
  • Replies to your emailsGuidesOne field on a send, and the customer's reply opens a conversation.
  • Let an agent triageGuidesAn AI agent reads, notes and drafts over MCP; a person sends.
  • Node SDKGuidesThe rasket package: typed from the API's own document, retries only what is safe.
  • Python SDKGuidesThe rasket package on PyPI: the Node client's methods, in snake_case, over httpx.
  • MCP serverGuidesConnect Claude, ChatGPT or any MCP client: your scopes, no key.
  • AI assistGuidesSubject lines, drafts and diagnosis — in the dashboard and over the API, off until you allow it.
  • AgentsGuidesLet an AI agent set Rasket up: the skill, the rules file, MCP, and the recipe they share.
  • OAuthGuidesLet another app act for a team: register, authorize with PKCE, exchange, refresh.
  • Single sign-onGuidesOIDC login for your team, a domain proved by DNS, enforcement and break-glass.
  • IntegrationsGuidesEvery integration and its status, and Rasket on Vercel, Netlify and Cloudflare.
  • SMTPGuidesSend from anything that speaks SMTP: settings, setup guides, limits and replies.
  • ZapierGuidesSend email, add contacts and react to email events from a Zap, with no code.
  • n8nGuidesThe Rasket node and trigger for n8n workflows: install, connect, every operation.
  • VercelGuidesAdd Rasket on Vercel: a Sending key in each project as RASKET_API_KEY, no copying.
  • WordPressGuidesThe Rasket plugin: every email your site sends, through Rasket, with a safe fallback.
  • NotionGuidesTurn a Notion database of people into contacts in a segment, once or every hour.
  • Migrating to RasketGuidesBring contacts, unsubscribes, lists and templates from Mailchimp, Klaviyo and more.
  • PipedreamGuidesRasket actions and instant sources for Pipedream workflows and Connect apps.
  • FramerGuidesThe Rasket plugin: sign-up forms on a Framer site, and Framer forms into contacts.
  • MakeGuidesComing soon: send email and react to email events from a Make scenario.
  • monday.comGuidesTurn board items into contacts and send a template when a board changes.
  • ClickUpGuidesReady-made Zapier and Make automations between ClickUp tasks and Rasket.
  • SlackGuidesEmail alerts in the Slack channels you choose, and /rasket for numbers and look-ups.
  • Google SheetsGuidesComing soon: turn a sheet tab of people into contacts in a segment.
  • AirtableGuidesComing soon: turn an Airtable table of people into contacts in a segment.
  • ShopifyGuidesRasket for Shopify: customers with their consent, store events and ready-made flows.
  • SMS quickstartGuidesSend your first text to a US or Canadian phone.
  • Get a numberGuidesToll-free or local numbers, and the registration carriers require.
  • Consent and STOPGuidesWho you may text, the proof you keep, and replies like STOP.
  • SMS campaignsGuidesText a segment, at a local time, priced before you send.
  • Texts in automationsGuidesThe Send SMS step, and what happens to a contact without a phone.
  • SMS webhooksGuidesThe six sms events and what each one carries.
  • SMS pricingGuidesTexts included in each plan, the price per message, and number fees.
  • EmailsAPI referenceSend, batch, retrieve, list, reschedule, cancel, attachments.
  • DomainsAPI referenceAdd a domain, publish its records, verify it.
  • API keysAPI referenceCreate, list, rename and revoke credentials.
  • WebhooksAPI referencePayloads, signature verification, retries and replay.
  • SuppressionsAPI referenceAddresses we will not send to, and why.
  • LogsAPI referenceEvery request made with this team's credentials.
  • MetricsAPI referenceDelivery, bounce, complaint and engagement counts.
  • TemplatesAPI referenceVersioned email content with typed variables, addressed by ID or alias.
  • ContactsAPI referenceYour audience: contacts, their typed properties, segments and topic choices.
  • SegmentsAPI referenceAudiences defined by a filter, by hand, or both.
  • TopicsAPI referenceWhat contacts subscribe to, and the preference page's list.
  • CampaignsAPI referenceCampaigns, at /broadcasts: one message to a segment, from draft to results.
  • AutopilotAPI referenceStore campaigns Autopilot drafts for you, each waiting for a yes or a skip.
  • ImportsAPI referenceCSV uploads: column mapping, conflicts and counts.
  • AutomationsAPI referenceWorkflows that run per contact: the graph, its versions, and every run.
  • Custom eventsAPI referenceThe names your product fires, and what starts a workflow.
  • ReceivingAPI referenceMail sent to you: the message, its attachments, its raw source.
  • OAuthAPI referenceClient registration, the token endpoint, and the grants a team has given.
  • TeamAPI referenceThe team a credential belongs to: its plan, sender identity, AI flag and members.
  • BillingAPI referencePlan, usage, invoices and add-ons, and the hosted pages where a customer pays.
  • AI helpersAPI referenceSubject lines, a first draft, and why an email did what it did.
  • InboxAPI referenceChannels, conversations, messages, notes and search in your support inbox.
  • SMSAPI referenceSend, schedule and cancel texts, numbers, test phones and SMS consent.

API referenceAI helpers

AI

Subject lines, a first draft, and an explanation of what happened to an email — the dashboard's three AI helpers, over the API — and the visual editor's four: a draft as blocks, a rewritten block, alt text, and subject variants for an A/B test.

Who can call it

What each credential can reach on the AI routes
CredentialEvery AI route
full_access200
sending_access401 restricted_api_key
OAuth token with ai:use200
OAuth token without ai:use403 invalid_permission

What is sent to the model and what is kept is described in the AI assist guide. A recipient's address is never part of it.

Refusals, in order

A request that passes authentication is checked in this order, so the first to fail is the one you see:

  1. AI assist is not configured for the account: 503 service_unavailable, "AI assist is not available on this account." Nothing is recorded and no credit is spent; there is nothing to turn on at your end.
  2. AI assist is off for the team: 403 invalid_permission, "AI assist is off for this team. A team admin can turn it on in Settings." Turn it on with PATCH /team and ai_assist_enabled: true.
  3. Too few AI credits for the request: 422 validation_error, "AI credits for this month are used up." or "This needs 3 AI credits and 1 is left this month.", with details.reason insufficient_credits and details.needed and details.available. Every answer carries credits_remaining, so you can stop before this.
  4. More than 10 AI requests in a minute, per team: 429 rate_limit_exceeded.

An accepted request spends one credit, and a draft as blocks three. A request that fails on our side costs nothing, and a diagnosis read back for an email that has not changed costs nothing either. Nor does a diagnosis of an email that failed on our mail servers' side: it comes back with cause: "provider_failure" and the recorded reason.

AI credits

Every plan includes AI credits each month: Free 5, Pro 100, Scale and Enterprise 500. Purchased credits are spent once the month's allowance is used up, soonest to expire first, and last 12 months. Autopilot only ever spends the allowance. An action starts only when its whole price is available, and a failed or refused request, the help chat and a diagnosis read back cost nothing. The team's admins are emailed at 80% and 100% of the allowance unless ai_credit_alerts is off.

What each AI action costs
What costs creditsCredits
Enhance (Inbox)1
Draft reply (Inbox)1
Rewrite a block1
Alt text1
Subject-line ideas1
A/B subjects1
Draft an email (HTML)1
Draft an email (editor)3
Create a form with AI (3 drafts)3, plus 4 per AI picture
AI picture (reused pictures free)4
Autopilot campaign (write + check)4, plus 4 per AI picture
Autopilot weekly style proposal1
Diagnose an email (once per change)1

GET /ai/credits returns the balance and this price list, GET /ai/usage where the credits went by feature, member or day, and GET /ai/activity every request of the last 13 months — never the text sent to the AI.

Endpoints

Suggest subject lines

POST /ai/subject-lines

Subject lines for an email you describe. Nothing is saved.

Body

  • subjectstring

    The current subject, if any.

  • htmlstring

    The HTML body, up to 100,000 characters.

  • textstring

    The plain-text body, up to 100,000 characters.

  • audiencestring

    Who the email is for, up to 2,000 characters.

1 more field (template_id)
  • template_idstring

    One of the team's templates, recorded as what the request was about. The content still comes from this body.

Request

curl -X POST "https://api.rasket.com/ai/subject-lines" \
  -H "Authorization: Bearer $RASKET_API_KEY" \
  -H "User-Agent: acme-billing/1.0" \
  -H "Content-Type: application/json" \
  -d '{
  "subject": "Our November update",
  "text": "Three new features and a price freeze.",
  "audience": "Customers on the Pro plan"
}'

Response 200

{
  "object": "ai_subject_suggestions",
  "suggestions": ["Three new features, and your price stays put", "November: what's new on your Pro plan"],
  "credits_remaining": 87,
  "credits": {
    "limit": 100,
    "used": 13,
    "remaining": 87,
    "purchased_remaining": 0
  }
}
  • Refused in this order: AI assist not configured for the account is 503 service_unavailable and costs nothing, AI assist off for the team is 403 invalid_permission, too few AI credits is 422 validation_error with details.reason: "insufficient_credits", details.needed and details.available, and more than 10 AI requests a minute is 429 rate_limit_exceeded.
  • An accepted request spends one credit.

Draft an email body

POST /ai/draft

An HTML and plain-text body from a brief, or a rework of a draft.

Body

  • briefstringRequired

    What the email should say, up to 2,000 characters.

  • tonestring

    neutral, friendly or formal.

  • existing_htmlstring

    A draft to rework instead of starting fresh, up to 100,000 characters.

1 more field (template_id)
  • template_idstring

    One of the team's templates, recorded as what the request was about.

Request

curl -X POST "https://api.rasket.com/ai/draft" \
  -H "Authorization: Bearer $RASKET_API_KEY" \
  -H "User-Agent: acme-billing/1.0" \
  -H "Content-Type: application/json" \
  -d '{
  "brief": "Welcome a new customer and point them at the quickstart.",
  "tone": "friendly"
}'

Response 200

{
  "object": "ai_draft",
  "html": "<p>Welcome aboard! …</p>",
  "text": "Welcome aboard! …",
  "credits_remaining": 86,
  "credits": {
    "limit": 100,
    "used": 14,
    "remaining": 86
  }
}
  • Refused in this order: AI assist not configured for the account is 503 service_unavailable and costs nothing, AI assist off for the team is 403 invalid_permission, too few AI credits is 422 validation_error with details.reason: "insufficient_credits", details.needed and details.available, and more than 10 AI requests a minute is 429 rate_limit_exceeded.
  • There is no subject in the answer: ask for subject lines separately. Nothing is saved or sent.

Draft an email as blocks

POST /ai/draft-blocks

A block document from a brief, in your brand kit, ready to save as a template's `design`.

Body

  • briefstringRequired

    What the email should say, up to 2,000 characters. The draft is in the brief's language.

  • goalstring

    What the email is for, such as announcement (the default), promotion, newsletter, welcome, event, product_update or feedback.

  • tonestring

    neutral (the default), friendly or formal.

  • lengthstring

    short, medium (the default) or long.

2 more fields (starter_hint, template_id)
  • starter_hintstring

    A starter's name to borrow the shape of, up to 500 characters.

  • template_idstring

    One of the team's templates, recorded as what the request was about.

Request

curl -X POST "https://api.rasket.com/ai/draft-blocks" \
  -H "Authorization: Bearer $RASKET_API_KEY" \
  -H "User-Agent: acme-billing/1.0" \
  -H "Content-Type: application/json" \
  -d '{
  "brief": "Announce our new reporting dashboard to existing customers.",
  "goal": "product_update"
}'

Response 200

{
  "object": "ai_block_draft",
  "document": {
    "kind": "rasket.blocks",
    "version": 1,
    "lang": "en",
    "sections": []
  },
  "credits_remaining": 84,
  "credits": {
    "limit": 100,
    "used": 16,
    "remaining": 84
  }
}
  • Refused in this order: AI assist not configured for the account is 503 service_unavailable and costs nothing, AI assist off for the team is 403 invalid_permission, too few AI credits is 422 validation_error with details.reason: "insufficient_credits", details.needed and details.available, and more than 10 AI requests a minute is 429 rate_limit_exceeded.
  • The layout is your brand kit's tokens, with your logo when the kit has one, and the document ends in a footer with an unsubscribe link. Nothing is saved or sent.
  • An accepted request spends 3 credits; a failed one spends nothing.

Rewrite a block

POST /ai/rewrite

One heading, text or button block, rewritten. Nothing is saved.

Body

  • blockobjectRequired

    The heading, text or button block, as it is in the template's design. Its id, type, style, links and {{variables}} are kept; only its text changes.

  • presetstring

    shorter, longer, friendlier or formal. Send this or instruction.

  • instructionstring

    How to rewrite it, in your words, up to 500 characters.

1 more field (template_id)
  • template_idstring

    One of the team's templates, recorded as what the request was about.

Request

curl -X POST "https://api.rasket.com/ai/rewrite" \
  -H "Authorization: Bearer $RASKET_API_KEY" \
  -H "User-Agent: acme-billing/1.0" \
  -H "Content-Type: application/json" \
  -d '{
  "block": {
    "id": "h",
    "type": "heading",
    "level": 1,
    "runs": [
      {
        "text": "Our new reporting dashboard"
      }
    ]
  },
  "preset": "shorter"
}'

Response 200

{
  "object": "ai_block_rewrite",
  "block": {
    "id": "h",
    "type": "heading",
    "level": 1,
    "runs": [
      {
        "text": "New: reporting"
      }
    ]
  },
  "credits_remaining": 83,
  "credits": {
    "limit": 100,
    "used": 17,
    "remaining": 83
  }
}
  • Refused in this order: AI assist not configured for the account is 503 service_unavailable and costs nothing, AI assist off for the team is 403 invalid_permission, too few AI credits is 422 validation_error with details.reason: "insufficient_credits", details.needed and details.available, and more than 10 AI requests a minute is 429 rate_limit_exceeded.
  • An accepted request spends one credit; a failed one spends nothing.

Suggest alt text

POST /ai/alt-text

One sentence of alt text for a picture. Nothing is saved.

Body

  • image_urlstring

    The picture's https:// address, which the assistant's provider fetches to look at. An address with a {{variable}} in it is not sent; describe the picture instead.

  • descriptionstring

    What the picture shows, up to 500 characters. Required without image_url.

  • contextstring

    The text around the picture, up to 2,000 characters.

1 more field (template_id)
  • template_idstring

    One of the team's templates, recorded as what the request was about.

Request

curl -X POST "https://api.rasket.com/ai/alt-text" \
  -H "Authorization: Bearer $RASKET_API_KEY" \
  -H "User-Agent: acme-billing/1.0" \
  -H "Content-Type: application/json" \
  -d '{
  "description": "A bar chart of weekly sends rising over a month",
  "context": "Our new reporting dashboard"
}'

Response 200

{
  "object": "ai_alt_text",
  "alt": "A bar chart showing weekly sends rising over one month.",
  "credits_remaining": 82,
  "credits": {
    "limit": 100,
    "used": 18,
    "remaining": 82
  }
}
  • Refused in this order: AI assist not configured for the account is 503 service_unavailable and costs nothing, AI assist off for the team is 403 invalid_permission, too few AI credits is 422 validation_error with details.reason: "insufficient_credits", details.needed and details.available, and more than 10 AI requests a minute is 429 rate_limit_exceeded.
  • An accepted request spends one credit; a failed one spends nothing.

Suggest subject variants

POST /ai/subject-variants

Three subject lines for an A/B test, each a different approach. Nothing is saved.

Body

  • subjectstring

    The current subject, if any.

  • htmlstring

    The HTML body, up to 100,000 characters.

  • textstring

    The plain-text body, up to 100,000 characters.

2 more fields (broadcast_id, template_id)
  • broadcast_idstring

    The campaign the variants are for, recorded as what the request was about. Nothing is saved on it.

  • template_idstring

    One of the team's templates, recorded as what the request was about.

Request

curl -X POST "https://api.rasket.com/ai/subject-variants" \
  -H "Authorization: Bearer $RASKET_API_KEY" \
  -H "User-Agent: acme-billing/1.0" \
  -H "Content-Type: application/json" \
  -d '{
  "subject": "Our November update",
  "text": "Three new features and a price freeze."
}'

Response 200

{
  "object": "ai_subject_variants",
  "variants": ["Three new features, same price", "What's new in November", "Your plan just got better"],
  "credits_remaining": 81,
  "credits": {
    "limit": 100,
    "used": 19,
    "remaining": 81
  }
}
  • Refused in this order: AI assist not configured for the account is 503 service_unavailable and costs nothing, AI assist off for the team is 403 invalid_permission, too few AI credits is 422 validation_error with details.reason: "insufficient_credits", details.needed and details.available, and more than 10 AI requests a minute is 429 rate_limit_exceeded.
  • Keep the ones you want with subject_variants on PATCH /broadcasts/{id}. An accepted request spends one credit; a failed one spends nothing.

Draft sign-up forms

POST /ai/draft-forms

Three sign-up form drafts from a description, in your brand, ready to save as a form's draft.

Body

  • promptstringRequired

    The form you want in a sentence or more, up to 2,000 characters: what it is for, what it offers and what it asks. The drafts are in its language.

  • kindstring

    popup, flyout or embedded: make all three drafts this kind. Omitted, each suits the ask.

1 more field (locale)
  • localestring

    Write the drafts in this language, such as de or fr-CA.

Request

curl -X POST "https://api.rasket.com/ai/draft-forms" \
  -H "Authorization: Bearer $RASKET_API_KEY" \
  -H "User-Agent: acme-billing/1.0" \
  -H "Content-Type: application/json" \
  -d '{
  "prompt": "A pop-up for our fall drop. 10% off for email, phone too if they want texts. Earthy colours, show one of the new jackets."
}'

Response 200

{
  "object": "ai_form_drafts",
  "drafts": [
    {
      "angle": "classic",
      "name": "Classic offer",
      "description": "Email + phone, 10% off",
      "kind": "popup",
      "notes": [],
      "needs": ["coupon_code"],
      "properties": [],
      "document": {
        "steps": [],
        "style": {},
        "targeting": {},
        "triggers": {}
      }
    }
  ],
  "partial": false,
  "credits_remaining": 81,
  "credits": {
    "limit": 100,
    "used": 19,
    "remaining": 81
  }
}
  • Refused in this order: AI assist not configured for the account is 503 service_unavailable and costs nothing, AI assist off for the team is 403 invalid_permission, too few AI credits is 422 validation_error with details.reason: "insufficient_credits", details.needed and details.available, and more than 10 AI requests a minute is 429 rate_limit_exceeded.
  • Each draft is laid out on one of the form templates in your brand kit's colours or your store theme's, with your logo when the kit has one. A product you ask for comes from your Shopify catalogue, and a phone field carries the standard text-message consent wording with the terms and privacy links from your SMS registration.
  • Every document passes the checks Publish runs except what only you can supply, listed in needs: the discount code a coupon reveals. Create any contact properties in properties before publishing. Nothing is saved.
  • An accepted request spends 3 credits; a failed one spends nothing. A description of fewer than 3 words is 422 validation_error.

Diagnose an email

POST /emails/{email_id}/diagnose

What happened to one email, its likely causes, and what to do next.

Path parameters

  • email_idstringRequired

    The email's ID.

Request

curl -X POST "https://api.rasket.com/emails/4ef9a417-02e9-4d39-ad75-9611e0fcc33c/diagnose" \
  -H "Authorization: Bearer $RASKET_API_KEY" \
  -H "User-Agent: acme-billing/1.0"

Response 200

{
  "object": "ai_diagnosis",
  "summary": "Email 4ef9a417-02e9-4d39-ad75-9611e0fcc33c bounced permanently at one recipient domain.",
  "likely_causes": ["The mailbox does not exist at the receiving domain."],
  "next_steps": ["Remove the address, or confirm it with the recipient."],
  "cause": null,
  "created_at": "2026-09-12T10:00:00.000Z",
  "stored": false,
  "credits_remaining": 85,
  "credits": {
    "limit": 100,
    "used": 15,
    "remaining": 85,
    "purchased_remaining": 0
  }
}
  • Refused in this order: AI assist not configured for the account is 503 service_unavailable and costs nothing, AI assist off for the team is 403 invalid_permission, too few AI credits is 422 validation_error with details.reason: "insufficient_credits", details.needed and details.available, and more than 10 AI requests a minute is 429 rate_limit_exceeded.
  • The model sees recipient domains, statuses and the event timeline — never a recipient's address or the body.
  • A diagnosis already made for the same state of the email comes back with stored: true and costs nothing.
  • An email that failed on our mail servers' side comes back with cause: "provider_failure": the recorded reason and what to do, with no credit spent.

Retrieve AI credits

GET /ai/credits

This month's AI credits, purchased credits, and what every AI action costs.

Request

curl -X GET "https://api.rasket.com/ai/credits" \
  -H "Authorization: Bearer $RASKET_API_KEY" \
  -H "User-Agent: acme-billing/1.0"

Response 200

{
  "object": "ai_credits",
  "limit": 100,
  "used": 72,
  "remaining": 28,
  "allowance_remaining": 28,
  "purchased_remaining": 0,
  "purchased_expires_at": null,
  "period_start": "2026-10-01T00:00:00.000Z",
  "resets_at": "2026-11-01T00:00:00.000Z",
  "autopilot": {
    "cap": 100,
    "spent": 8
  },
  "alerts": true,
  "prices": [
    {
      "action": "inbox_enhance",
      "feature": "inbox",
      "label": "Enhance (Inbox)",
      "credits": 1,
      "per_picture": null
    },
    {
      "action": "create_form",
      "feature": "forms",
      "label": "Create a form with AI (3 drafts)",
      "credits": 3,
      "per_picture": 4
    }
  ]
}
  • Purchased credits are spent once the month's allowance is used up, soonest to expire first. Autopilot only ever spends the allowance.
  • remaining is what the team can spend right now, less AI requests still running. Failed or refused requests and the help chat never cost credits. Reading this costs nothing.

Retrieve AI usage

GET /ai/usage

Where the team's AI credits went, by feature, member or day.

Query parameters

  • group_bystring

    feature (the default), member or day (UTC).

  • fromstring

    ISO 8601, inclusive. Default: the start of this month.

  • tostring

    ISO 8601, exclusive. Default: the start of next month. At most 13 months after from.

Request

curl -X GET "https://api.rasket.com/ai/usage" \
  -H "Authorization: Bearer $RASKET_API_KEY" \
  -H "User-Agent: acme-billing/1.0"

Response 200

{
  "object": "ai_usage",
  "group_by": "feature",
  "from": "2026-10-01T00:00:00.000Z",
  "to": "2026-11-01T00:00:00.000Z",
  "total": 72,
  "data": [
    {
      "key": "inbox",
      "label": null,
      "credits": 31
    },
    {
      "key": "editor",
      "label": null,
      "credits": 18
    },
    {
      "key": "forms",
      "label": null,
      "credits": 15
    },
    {
      "key": "autopilot",
      "label": null,
      "credits": 8
    }
  ]
}
  • Totals are the ledger's: every credit charged counts once. By member, key is a user ID, autopilot, api (an API key, or a member since removed) or unknown (a request older than the activity log).

List AI activity

GET /ai/activity

The team's AI requests of the last 13 months, newest first.

Query parameters

  • limitnumber

    1–100, default 20.

  • afterstring

    Return requests older than this ID.

  • beforestring

    Return requests newer than this ID.

  • featurestring

    inbox, editor, forms, pictures, autopilot or emails.

  • user_idstring

    Only this member's requests.

Request

curl -X GET "https://api.rasket.com/ai/activity" \
  -H "Authorization: Bearer $RASKET_API_KEY" \
  -H "User-Agent: acme-billing/1.0"

Response 200

{
  "object": "list",
  "has_more": false,
  "data": [
    {
      "object": "ai_activity",
      "id": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "created_at": "2026-10-27T14:02:00.000Z",
      "user_id": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5c",
      "actor": "member",
      "feature": "inbox",
      "kind": "enhance_reply",
      "status": "ok",
      "target_type": null,
      "target_id": null,
      "credits": 1
    }
  ]
}
  • Who, what, when and what it cost — never the text sent to the AI or what it answered.

Ask for more AI credits

POST /ai/credits/requests

Email the team's admins that you need more AI credits.

Body

  • actionstring

    The AI action that did not fit, such as create_form. Named in the email.

Request

curl -X POST "https://api.rasket.com/ai/credits/requests" \
  -H "Authorization: Bearer $RASKET_API_KEY" \
  -H "User-Agent: acme-billing/1.0" \
  -H "Content-Type: application/json" \
  -d '{
  "action": "create_form"
}'

Response 200

{
  "object": "ai_credit_request",
  "status": "sent",
  "admins": 2
}
  • Only an admin can buy credits, so a key that acts as the team's admin is 403 invalid_permission.
  • Once in 24 hours per caller and five times a day per team; a repeat is status: "already_asked" and sends nothing. Costs nothing.