Skip to content
Aller au contenu
Charitips

API reference

Errors

What the API returns when a call fails: the status, the body and the message of each error, and how to fix it.

The error format

Every error is a JSON body with a readable message. Most errors also repeat the HTTP status in statusCode and its name in error:

JSON
{  "statusCode": 403,  "message": "Campaign has to be activated first.",  "error": "Forbidden"}

Some errors carry a code instead of statusCode and error, for example a closed account or a donation over the campaign's budget:

JSON
{  "message": "Insufficient campaign budget.",  "code": "INSUFFICIENT_CAMPAIGN_BUDGET"}

The 409 on uniqueExternalId and the 429 carry statusCode and message only. Read the HTTP status of the response, then code when there is one, then message. Never rely on error.

When the request does not match the schema, message is a list with one entry per problem. Fields that are not part of the schema are rejected, not ignored.

JSON
{  "statusCode": 400,  "message": ["amount must not be less than 1", "property foo should not exist"],  "error": "Bad Request"}

Status codes

  • 400: the request is invalid, through a field, a value or a combination of them. Fix the request, do not retry it.
  • 401: the access token is missing, expired or invalid. Retry once, with a new token. On POST /v1/authentication itself, a 401 Unauthorized means the Basic authentication header is missing, and Invalid credentials means the client id or secret is wrong, or belongs to the other environment.
  • 402: the account lacks something the call needs: a plan feature (Plan upgrade required), a payment method (MISSING_PAYMENT_METHOD) or an active subscription (NO_ACTIVE_SUBSCRIPTION). Fix the account, then retry.
  • 403: the call is understood but refused, because of the state of the resource (a donation on a campaign that is not active yet, an account that has not finished onboarding) or because of your role. Change the state first.
  • 404: no such resource on your account and environment. An id that belongs to another account is treated as unknown: 404 when it is in the path, 400 Bad Request when it is in the body or the query, never 403. Ids from the sandbox do not exist in production.
  • 409: the resource already exists, is already in that state, or conflicts with another one. On a create with uniqueExternalId, your previous call succeeded. On a claim, a cast or a validation, the donation or the vote is no longer pending: read it to see its status. Otherwise read the message: Slug already used means another campaign has that slug, and on an update, Unique constraint failed on uniqueExternalId means another record already uses that id.
  • 429: too many calls to an endpoint that has a limit, like the bulk download links. Wait the number of seconds given in the Retry-After header, then retry. Never retry in a loop. The endpoints concerned are listed below.
  • 500: something failed on our side. Retry once with the same uniqueExternalId: a duplicate then returns 409, not a second donation.

A token lasts one hour: create one, reuse it for every call, and create the next one when a call returns 401. Asking for a new token before each call makes your integration slower.

Retrying safely

Send your own id in uniqueExternalId when you create a donation, a vote, a donor or a recurring donation. If the network fails and you send the call again, the second one returns 409 Unique constraint failed on uniqueExternalId instead of creating a duplicate. Fetch the first one with the list endpoint filtered on that id (donations, votes and donors); for recurring donations, keep the id you received at creation, as their list has no such filter.

Every error, by endpoint

Read from the API code. Each entry says what triggers it and how to fix it.

400 Bad Request

  • A field is missing, has the wrong type, or is not part of the request schema.72 endpoints

    How to fix: message lists every problem. Unknown fields are rejected, not ignored: remove them rather than sending extra data.

    {
      "statusCode": 400,
      "message": [
        "amount must not be less than 1",
        "property foo should not exist"
      ],
      "error": "Bad Request"
    }

    Returned by:Create an admin widget tokenCreate a donor widget tokenCreate a donor platform widget tokenList accountsGet an accountUpdate an accountCreate an invitationList child accountsCreate a child accountEnable donor platformGet payment detailsGet a charityand 60 more

  • Invalid customDomain4 endpoints

    How to fix: A custom domain cannot contain a Charitips domain (charitips.com, charitips.net, charitips.org, charitips.tech, chari.tips). Use a domain you own, or subdomain for an address under Charitips. Create a site

    {
      "statusCode": 400,
      "message": "Invalid customDomain",
      "error": "Bad Request"
    }

    Returned by:Update an accountCreate a child accountCreate a siteUpdate a site

  • Invalid campaignIds3 endpoints

    How to fix: At least one id of campaignIds is not a campaign of this account, or an id is repeated. List the account's campaigns and send each id once. List campaigns

    {
      "statusCode": 400,
      "message": "Invalid campaignIds",
      "error": "Bad Request"
    }

    Returned by:Create an invitationUpdate a user invitationUpdate a user

  • A selection must have at least one charity when linked to a campaign2 endpoints

    How to fix: Add at least one charity to the selection before linking it to a campaign. Add a charity

    {
      "statusCode": 400,
      "message": "A selection must have at least one charity when linked to a campaign",
      "error": "Bad Request"
    }

    Returned by:Update a charities selectionRemove a charity

  • Bad Request2 endpoints

    How to fix: The campaignId does not exist on your account and environment. Ids from the sandbox do not exist in production.

    {
      "statusCode": 400,
      "message": "Bad Request"
    }

    Returned by:Create a recurring donationCreate a vote

  • Both donor.email and donor.firstName are required for email campaigns2 endpoints

    How to fix: Pass both donor.email and donor.firstName. Create a donation

    {
      "statusCode": 400,
      "message": "Both donor.email and donor.firstName are required for email campaigns",
      "error": "Bad Request"
    }

    Returned by:Create a donationCreate a vote

  • Both donor.slackId and donor.firstName are required for slack campaigns2 endpoints

    How to fix: Pass both donor.slackId and donor.firstName. Create a donation

    {
      "statusCode": 400,
      "message": "Both donor.slackId and donor.firstName are required for slack campaigns",
      "error": "Bad Request"
    }

    Returned by:Create a donationCreate a vote

  • Budget is required for FIXED_AMOUNT campaigns2 endpoints

    How to fix: Set budget, in cents, when amountType is FIXED_AMOUNT. Create a campaign

    {
      "statusCode": 400,
      "message": "Budget is required for FIXED_AMOUNT campaigns",
      "error": "Bad Request"
    }

    Returned by:Enable donor platformCreate a campaign

  • DISTRIBUTION campaigns must also be FIXED_AMOUNT campaigns2 endpoints

    How to fix: A DISTRIBUTION campaign shares a fixed budget: set amountType to FIXED_AMOUNT and a budget. Create a campaign

    {
      "statusCode": 400,
      "message": "DISTRIBUTION campaigns must also be FIXED_AMOUNT campaigns",
      "error": "Bad Request"
    }

    Returned by:Enable donor platformCreate a campaign

  • donor is required for EMAIL campaigns.2 endpoints

    How to fix: EMAIL campaigns send the donation to someone: pass donor with at least email and firstName. Create a donation

    {
      "statusCode": 400,
      "message": "donor is required for EMAIL campaigns.",
      "error": "Bad Request"
    }

    Returned by:Create a donationCreate a vote

  • donor is required for SLACK campaigns.2 endpoints

    How to fix: SLACK campaigns send the donation in Slack: pass donor with slackId and firstName. Create a donation

    {
      "statusCode": 400,
      "message": "donor is required for SLACK campaigns.",
      "error": "Bad Request"
    }

    Returned by:Create a donationCreate a vote

  • givingTarget is only supported for fundraising campaigns2 endpoints

    How to fix

    • Enable donor platform: Enabling the donor platform creates a spontaneous donations campaign from a Charitips template, and that campaign was refused. Nothing in your request causes it: contact us. Enable donor platform
    • Create a campaign: givingTarget only applies when the donor pays: send defaultHasBeenCharged: true, or remove givingTarget. Create a campaign
    {
      "statusCode": 400,
      "message": "givingTarget is only supported for fundraising campaigns",
      "error": "Bad Request"
    }

    Returned by:Enable donor platformCreate a campaign

  • INCLUDED fee type not supported2 endpoints

    How to fix

    • Enable donor platform: Enabling the donor platform creates a spontaneous donations campaign from a Charitips template, and that campaign was refused. Nothing in your request causes it: contact us. Enable donor platform
    • Create a campaign: defaultFeeType INCLUDED only works with defaultHasBeenCharged: true. Leave defaultFeeType out or set it to EXCLUDED. Create a campaign
    {
      "statusCode": 400,
      "message": "INCLUDED fee type not supported",
      "error": "Bad Request"
    }

    Returned by:Enable donor platformCreate a campaign

  • Insufficient campaign budget.2 endpoints

    How to fix: This donation would take the campaign over its budget. Create a smaller donation, or use another campaign: the API does not change the budget of an existing campaign.

    {
      "message": "Insufficient campaign budget.",
      "code": "INSUFFICIENT_CAMPAIGN_BUDGET"
    }

    Returned by:Create a donationClaim a recurring donation

  • Invalid charitiesSelectionId2 endpoints

    How to fix: The selection does not exist on your account. List your selections, or create one. List charities selections

    {
      "statusCode": 400,
      "message": "Invalid charitiesSelectionId",
      "error": "Bad Request"
    }

    Returned by:Create a campaignUpdate a campaign

  • Invalid parameter includeDonor2 endpoints

    How to fix: includeDonor is not available with API credentials. Remove it, and read the donor with its own endpoint. Get a donor

    {
      "statusCode": 400,
      "message": "Invalid parameter includeDonor",
      "error": "Bad Request"
    }

    Returned by:List donationsList votes

  • Nested subdomains are not allowed2 endpoints

    How to fix: The part before your own subdomain must be a single label: 1 to 63 lowercase letters, digits or hyphens, no dot, not starting or ending with a hyphen. Donations for your business customers

    {
      "statusCode": 400,
      "message": "Nested subdomains are not allowed",
      "error": "Bad Request"
    }

    Returned by:Update an accountCreate a child account

  • Only members can be assigned campaigns2 endpoints

    How to fix: campaignIds only apply to the MEMBER role, and the check reads the role saved before this call. Set role to MEMBER in a first update, then send campaignIds, or leave campaignIds out. Account hierarchy

    {
      "statusCode": 400,
      "message": "Only members can be assigned campaigns",
      "error": "Bad Request"
    }

    Returned by:Update a user invitationUpdate a user

  • Only one of <givingType> campaigns is supported2 endpoints

    How to fix

    • Enable donor platform: Enabling the donor platform creates a spontaneous donations campaign from a Charitips template, and that campaign was refused. Nothing in your request causes it: contact us. Enable donor platform
    • Create a campaign: The campaign template sets a giving type (PAYROLL or PAID_TIME_OFF), and your account already has a campaign of that type. Use the existing campaign instead of creating a second one. List campaigns
    {
      "statusCode": 400,
      "message": "Only one of <givingType> campaigns is supported",
      "error": "Bad Request"
    }

    Returned by:Enable donor platformCreate a campaign

  • Public campaigns must be both FIXED_AMOUNT and DISTRIBUTION campaigns2 endpoints

    How to fix: A PUBLIC campaign is a vote on a fixed budget: set amountType FIXED_AMOUNT and donationType DISTRIBUTION, or keep it PRIVATE. Create a campaign

    {
      "statusCode": 400,
      "message": "Public campaigns must be both FIXED_AMOUNT and DISTRIBUTION campaigns",
      "error": "Bad Request"
    }

    Returned by:Enable donor platformCreate a campaign

  • Subdomain must ends with .<subdomain>2 endpoints

    How to fix: A child account's subdomain sits under yours: send <child>.<your subdomain>, for example shop.acme when your subdomain is acme. The message gives your subdomain. Donations for your business customers

    {
      "statusCode": 400,
      "message": "Subdomain must ends with .<subdomain>",
      "error": "Bad Request"
    }

    Returned by:Update an accountCreate a child account

  • A selection must have at least one charity to be linked to a campaign1 endpoint

    How to fix: You sent campaignId: pass at least one id in charityIds as well, or create the selection without campaignId. Create a charities selection

    {
      "statusCode": 400,
      "message": "A selection must have at least one charity to be linked to a campaign",
      "error": "Bad Request"
    }

    Returned by:Create a charities selection

  • accessToken is required for Bearer authentication1 endpoint

    How to fix: With authenticationStrategy BEARER, pass the accessToken Charitips will send to your endpoint. Webhooks

    {
      "statusCode": 400,
      "message": "accessToken is required for Bearer authentication",
      "error": "Bad Request"
    }

    Returned by:Create a webhook

  • accountId is required when includeCampaigns is true1 endpoint
    {
      "statusCode": 400,
      "message": "accountId is required when includeCampaigns is true",
      "error": "Bad Request"
    }

    Returned by:List campaign templates

  • At least one campaign is required for members1 endpoint

    How to fix: A MEMBER only sees the campaigns they are given. Send campaignIds with at least one campaign of the account, or invite the user as ADMIN or PAYROLL_MANAGER. Create an invitation

    {
      "statusCode": 400,
      "message": "At least one campaign is required for members",
      "error": "Bad Request"
    }

    Returned by:Create an invitation

  • At least one of subdomain and customDomain is required.1 endpoint

    How to fix: Send subdomain, customDomain, or both. Create a site

    {
      "statusCode": 400,
      "message": "At least one of subdomain and customDomain is required.",
      "error": "Bad Request"
    }

    Returned by:Create a site

  • Bad Request1 endpoint

    How to fix: The campaignId does not exist on your account and environment. Ids from the sandbox do not exist in production.

    {
      "message": "Bad Request",
      "code": "INVALID_POSTAL_ADDRESS"
    }

    Returned by:Create a donation

  • Both username and password are required for Basic authentication1 endpoint

    How to fix: With authenticationStrategy BASIC, pass the username and password Charitips will send to your endpoint. Webhooks

    {
      "statusCode": 400,
      "message": "Both username and password are required for Basic authentication",
      "error": "Bad Request"
    }

    Returned by:Create a webhook

  • Campaign budget exceeds payment card amount limit1 endpoint

    How to fix: The amount to charge (the budget, the usage not billed yet and the fees) is above what the account's payment card can be charged at once. Create the campaign with a lower budget, or switch to another payment method, such as a bank transfer, in the dashboard, under Settings > Billing. The sandbox never returns this error. Create a campaign

    {
      "message": "Campaign budget exceeds payment card amount limit",
      "code": "PAYMENT_CARD_AMOUNT_LIMIT_EXCEEDED"
    }

    Returned by:Activate a campaign

  • Campaign budget exceeds SEPA Direct Debit amount limit1 endpoint

    How to fix: The amount to charge (the budget, the usage not billed yet and the fees) is above what a SEPA direct debit can take at once. Create the campaign with a lower budget, or switch to another payment method, such as a bank transfer, in the dashboard, under Settings > Billing. The sandbox never returns this error. Create a campaign

    {
      "message": "Campaign budget exceeds SEPA Direct Debit amount limit",
      "code": "SDD_AMOUNT_LIMIT_EXCEEDED"
    }

    Returned by:Activate a campaign

  • Campaign is a DISTRIBUTION one. Only votes can be created1 endpoint

    How to fix: On a DISTRIBUTION campaign, people vote on a budget: create a vote, not a donation. Create a vote

    {
      "statusCode": 400,
      "message": "Campaign is a DISTRIBUTION one. Only votes can be created",
      "error": "Bad Request"
    }

    Returned by:Create a donation

  • Campaign is a FACE_VALUE one. Only donations can be created1 endpoint

    How to fix: On a FACE_VALUE campaign, each person gives an amount: create a donation, not a vote. Create a donation

    {
      "statusCode": 400,
      "message": "Campaign is a FACE_VALUE one. Only donations can be created",
      "error": "Bad Request"
    }

    Returned by:Create a vote

  • Cannot delete a charities selection with active campaigns1 endpoint

    How to fix: A campaign that is ACTIVE, PENDING or DRAFT still uses this selection. Give those campaigns another selection, or delete it once they are complete or canceled. List campaigns

    {
      "statusCode": 400,
      "message": "Cannot delete a charities selection with active campaigns",
      "error": "Bad Request"
    }

    Returned by:Delete a charities selection

  • charityId cannot be set for POSTAL campaigns: the recipient chooses the charity with the card.1 endpoint
    {
      "statusCode": 400,
      "message": "charityId cannot be set for POSTAL campaigns: the recipient chooses the charity with the card.",
      "error": "Bad Request"
    }

    Returned by:Create a donation

  • Donation not claimed yet1 endpoint

    How to fix: Claim the donation for a charity first. Claim a donation

    {
      "statusCode": 400,
      "message": "Donation not claimed yet",
      "error": "Bad Request"
    }

    Returned by:Validate a donation

  • Donations of an order campaign cannot be created through the API.1 endpoint
    {
      "statusCode": 400,
      "message": "Donations of an order campaign cannot be created through the API.",
      "error": "Bad Request"
    }

    Returned by:Create a donation

  • Exactly 3 START and 3 END reminders are required1 endpoint
    {
      "statusCode": 400,
      "message": "Exactly 3 START and 3 END reminders are required",
      "error": "Bad Request"
    }

    Returned by:Update campaign reminders

  • Invalid authenticationStrategy1 endpoint

    How to fix: Set authenticationStrategy to BASIC (with username and password) or BEARER (with accessToken). Webhooks

    {
      "statusCode": 400,
      "message": "Invalid authenticationStrategy",
      "error": "Bad Request"
    }

    Returned by:Create a webhook

  • Invalid campaignReminderId1 endpoint
    {
      "statusCode": 400,
      "message": "Invalid campaignReminderId",
      "error": "Bad Request"
    }

    Returned by:Update campaign reminders

  • Invalid fields: <join(', ')>1 endpoint

    How to fix: A donor platform token can only change the donor's own profile: firstName, lastName, phone, pictureUrl, birthdate, personalEmail, title, persona, hasAcceptedTerms, street, zip, city and country. Remove the fields listed in the message. Update a donor

    {
      "statusCode": 400,
      "message": "Invalid fields: <join(', ')>",
      "error": "Bad Request"
    }

    Returned by:Update a donor

  • Invalid lead information1 endpoint

    How to fix: A field enabled in the campaign's leadCollectionOptions (fullname, companyName, email, phone or custom) is missing from lead. Claim a donation

    {
      "statusCode": 400,
      "message": "Invalid lead information",
      "error": "Bad Request"
    }

    Returned by:Claim a donation

  • Invalid parentDonationId1 endpoint
    {
      "statusCode": 400,
      "message": "Invalid parentDonationId",
      "error": "Bad Request"
    }

    Returned by:Create a donation

  • Invoice amount <amount_due> is over the payment card limit <PAYMENT_CARD_AMOUNT_LIMIT>1 endpoint

    How to fix: The budget of the campaign is invoiced at activation, and the invoice is above what the payment card can be charged at once. Create the campaign with a lower budget, or switch to another payment method, such as a bank transfer, in the dashboard, under Settings > Billing. The sandbox never returns this error. Create a campaign

    {
      "message": "Invoice amount <amount_due> is over the payment card limit <PAYMENT_CARD_AMOUNT_LIMIT>",
      "code": "PAYMENT_CARD_AMOUNT_LIMIT_EXCEEDED"
    }

    Returned by:Activate a campaign

  • Invoice amount <amount_due> is over the SDD limit <SDD_AMOUNT_LIMIT>1 endpoint

    How to fix: The budget of the campaign is invoiced at activation, and the invoice is above what a SEPA direct debit can take at once. Create the campaign with a lower budget, or switch to another payment method, such as a bank transfer, in the dashboard, under Settings > Billing. The sandbox never returns this error. Create a campaign

    {
      "message": "Invoice amount <amount_due> is over the SDD limit <SDD_AMOUNT_LIMIT>",
      "code": "SDD_AMOUNT_LIMIT_EXCEEDED"
    }

    Returned by:Activate a campaign

  • Language is already the default language1 endpoint

    How to fix: This is the campaign's own language: its texts are the campaign fields. Update the campaign to change them, or send another language. Update a campaign

    {
      "statusCode": 400,
      "message": "Language is already the default language",
      "error": "Bad Request"
    }

    Returned by:Add a campaign translation

  • Lead collection is not enabled for this campaign1 endpoint

    How to fix: The campaign does not collect leads: remove lead from the claim, or create the campaign with withLeadCollection and leadCollectionOptions. Create a campaign

    {
      "statusCode": 400,
      "message": "Lead collection is not enabled for this campaign",
      "error": "Bad Request"
    }

    Returned by:Claim a donation

  • Lead has to accept terms and conditions1 endpoint

    How to fix: Set lead.hasAcceptedTerms to true once the person has accepted the terms. Claim a donation

    {
      "statusCode": 400,
      "message": "Lead has to accept terms and conditions",
      "error": "Bad Request"
    }

    Returned by:Claim a donation

  • Lead is required1 endpoint

    How to fix: The campaign collects the donor's details at the claim: pass lead with the fields enabled in the campaign's leadCollectionOptions and hasAcceptedTerms set to true. Claim a donation

    {
      "statusCode": 400,
      "message": "Lead is required",
      "error": "Bad Request"
    }

    Returned by:Claim a donation

  • Missing params in createFileGenerationRequest1 endpoint

    How to fix: params must carry campaignId (required for PRINT_PHYSICAL_CARDS_PDF) or fileRefs. Send one of them. Create a file generation request

    {
      "statusCode": 400,
      "message": "Missing params in createFileGenerationRequest",
      "error": "Bad Request"
    }

    Returned by:Create a file generation request

  • No budget set for this campaign1 endpoint

    How to fix: A campaign with amountType: FIXED_AMOUNT needs a budget in cents, and the API cannot add one after creation. Create the campaign again with its budget, then activate it. Create a campaign

    {
      "message": "No budget set for this campaign",
      "code": "MISSING_BUDGET"
    }

    Returned by:Activate a campaign

  • No charity selection linked to this campaign1 endpoint

    How to fix: Create a charities selection with at least one charity, set it on the campaign with charitiesSelectionId, then activate. Create a charities selection

    {
      "statusCode": 400,
      "message": "No charity selection linked to this campaign",
      "error": "Bad Request"
    }

    Returned by:Activate a campaign

  • No domain found for your account1 endpoint

    How to fix: The billing link is built on your own account's site. Every account gets its site when its onboarding is completed, so your account should have one: contact us. Create a shareable billing link

    {
      "statusCode": 400,
      "message": "No domain found for your account",
      "error": "Bad Request"
    }

    Returned by:Create a shareable billing link

  • Only one of accountId or includeChildAccountsCampaigns can be used1 endpoint

    How to fix: Send accountId for the metrics of one account, or includeChildAccountsCampaigns=true to add your child accounts' campaigns to yours, not both. Get all campaigns metrics

    {
      "statusCode": 400,
      "message": "Only one of accountId or includeChildAccountsCampaigns can be used",
      "error": "Bad Request"
    }

    Returned by:Get all campaigns metrics

  • Recurring donations can only be created for FREE_AMOUNT campaigns1 endpoint

    How to fix: Use a campaign with amountType FREE_AMOUNT for recurring donations. Create a campaign

    {
      "statusCode": 400,
      "message": "Recurring donations can only be created for FREE_AMOUNT campaigns",
      "error": "Bad Request"
    }

    Returned by:Create a recurring donation

  • Reminder type is required for each reminder1 endpoint
    {
      "statusCode": 400,
      "message": "Reminder type is required for each reminder",
      "error": "Bad Request"
    }

    Returned by:Update campaign reminders

  • Vote not casted yet1 endpoint

    How to fix: Cast the vote for a charity first. Cast a vote

    {
      "statusCode": 400,
      "message": "Vote not casted yet",
      "error": "Bad Request"
    }

    Returned by:Validate a vote

  • Votes cannot be posted.1 endpoint
    {
      "statusCode": 400,
      "message": "Votes cannot be posted.",
      "error": "Bad Request"
    }

    Returned by:Create a vote

401 Unauthorized

  • Unauthorized113 endpoints

    How to fix

    • Create a user magic link, Create a donor magic link, Create an admin widget token, Create a donor widget token, Create a donor platform widget token, Logout a user, Logout a donor, List accounts, Get an account, Update an account, Create an invitation, List child accounts, Create a child account, List account reports, Create a shareable billing link, Get payment methods, Enable donor platform, Disable a donor platform, Get entitlements, Get payment details, Get a charity, List charities, Find all profiles, List charity profiles, List charities selections, Create a charities selection, Get a charities selection, Update a charities selection, Delete a charities selection, Add a charity, Remove a charity, List calendar event instances, Get a calendar event instance, List campaigns, Create a campaign, Activate a campaign, Close a campaign, Get a campaign, Update a campaign, Delete a campaign, Get all campaigns metrics, Get campaign metrics, Get a campaign report, Add a campaign translation, Update a campaign translation, Delete a campaign translation, Update campaign reminders, Get a donation matching, Update a donation matching, List campaign templates, Get a campaign template, List card designs, List donations, Create a donation, Claim a donation, Get a donation, Update a donation, Delete a donation, Validate a donation, Create a donation fiscal receipt, Get a donation fiscal receipt, Find donor fiscal receipts, Find donor payment methods, List donors, Create a donor, Get a donor, Update a donor, List invoices, Get an invoice, Generate an invoice download url, Generate an invoices bulk download url, Get a file, Create a file generation request, Generate a file generation request download url, List fiscal receipts, Get a fiscal receipt, Generate a fiscal receipt download url, Generate a fiscal receipts bulk download url, Get fiscal receipt donations, List recurring donations, Create a recurring donation, Claim a recurring donation, Get a recurring donation, Update a recurring donation, Cancel a recurring donation, Pause a recurring donation, Resume a recurring donation, List sites, Create a site, Get a site, Update a site, Get site status, List user invitations, Update a user invitation, Delete a user invitation, List users, Create a user, Get a user, Update a user, Delete a user, List votes, Create a vote, Cast a vote, Get a vote, Update a vote, Delete a vote, Validate a vote, List webhooks, Create a webhook, Search logs, Get a webhook, Delete a webhook: The access token is missing, expired or invalid. Create a new one with your client id and secret, send it as Authorization: Bearer <accessToken>, then retry once. Sandbox tokens only work on api.sandbox.charitips.com. Authentication
    • Create a token: The request has no Basic authentication header. Send the client id and secret as Basic authentication, with -u id:secret in cURL, not a Bearer token. Authentication
    {
      "statusCode": 401,
      "message": "Unauthorized"
    }

    Returned by:Create a tokenCreate a user magic linkCreate a donor magic linkCreate an admin widget tokenCreate a donor widget tokenCreate a donor platform widget tokenLogout a userLogout a donorList accountsGet an accountUpdate an accountCreate an invitationand 101 more

  • Invalid credentials1 endpoint

    How to fix: The client id or secret is wrong, or the pair belongs to the other environment: sandbox credentials start with test_ and only work on api.sandbox.charitips.com. Send them as Basic authentication (-u id:secret). Sandbox

    {
      "statusCode": 401,
      "message": "Invalid credentials",
      "error": "Unauthorized"
    }

    Returned by:Create a token

402 Payment Required

403 Forbidden

  • Account closed112 endpoints

    How to fix: The account behind these credentials is closed: no token is issued and every call is refused, reads included. Contact Charitips to reopen it. Troubleshooting

    {
      "message": "Account closed",
      "code": "ACCOUNT_CLOSED"
    }

    Returned by:Create a tokenCreate a user magic linkCreate a donor magic linkCreate an admin widget tokenCreate a donor widget tokenCreate a donor platform widget tokenLogout a userLogout a donorList accountsGet an accountUpdate an accountCreate an invitationand 100 more

  • Forbidden59 endpoints

    How to fix: Your credentials cannot perform this action on this resource. An id from another account never answers 403: it is treated as unknown, with a 404 in the path or a 400 Bad Request in the body or the query.

    {
      "statusCode": 403,
      "message": "Forbidden"
    }

    Returned by:Create a user magic linkCreate a donor magic linkCreate a donor platform widget tokenLogout a userLogout a donorGet an accountUpdate an accountCreate an invitationCreate a child accountList account reportsCreate a shareable billing linkGet payment methodsand 47 more

  • Account not validated9 endpoints

    How to fix: The account behind your credentials has not finished onboarding. Complete it in the dashboard, or contact us. Troubleshooting

    {
      "statusCode": 403,
      "message": "Account not validated",
      "error": "Forbidden"
    }

    Returned by:Create a campaignActivate a campaignCreate a donationClaim a donationCreate a recurring donationClaim a recurring donationCreate a siteCreate a voteCast a vote

  • Campaign has ended.7 endpoints

    How to fix: The campaign is COMPLETE or CANCELED: nothing can be created, claimed or cast on it any more. Use an active campaign. List campaigns

    {
      "statusCode": 403,
      "message": "Campaign has ended.",
      "error": "Forbidden"
    }

    Returned by:Activate a campaignCreate a donationClaim a donationCreate a recurring donationClaim a recurring donationCreate a voteCast a vote

  • Campaign has to be activated first.3 endpoints

    How to fix: Activate the campaign once it has its charities selection, then retry. Activate a campaign

    {
      "statusCode": 403,
      "message": "Campaign has to be activated first.",
      "error": "Forbidden"
    }

    Returned by:Create a donationCreate a recurring donationCreate a vote

  • This selection can't be customized3 endpoints

    How to fix: The selection belongs to a campaign whose charities cannot be changed. Create a new selection for your campaign. Create a charities selection

    {
      "statusCode": 403,
      "message": "This selection can't be customized",
      "error": "Forbidden"
    }

    Returned by:Update a charities selectionAdd a charityRemove a charity

  • Donation has not been processed yet.2 endpoints

    How to fix: The donation is still being processed. Wait for the donation_update webhook, then retry. Webhooks

    {
      "statusCode": 403,
      "message": "Donation has not been processed yet.",
      "error": "Forbidden"
    }

    Returned by:Create a donation fiscal receiptGet a donation fiscal receipt

  • Only recurring donations can be created for recurring campaigns.2 endpoints

    How to fix: This campaign has a recurring frequency: create a recurring donation. Create a recurring donation

    {
      "statusCode": 403,
      "message": "Only recurring donations can be created for recurring campaigns.",
      "error": "Forbidden"
    }

    Returned by:Create a donationCreate a vote

  • Parent account is missing a domain2 endpoints

    How to fix: A child's subdomain is built under your own subdomain, and your account has none. Contact us to set it up, or give the child account a customDomain instead. Donations for your business customers

    {
      "statusCode": 403,
      "message": "Parent account is missing a domain",
      "error": "Forbidden"
    }

    Returned by:Update an accountCreate a child account

  • A FIXED_AMOUNT campaign cannot be closed before its first donation or vote.1 endpoint
    {
      "message": "A FIXED_AMOUNT campaign cannot be closed before its first donation or vote.",
      "code": "NOTHING_TO_CLOSE"
    }

    Returned by:Close a campaign

  • Account not active1 endpoint

    How to fix: The account behind these credentials has not finished onboarding, so no token is issued. Complete the onboarding in the dashboard, or contact us. Troubleshooting

    {
      "statusCode": 403,
      "message": "Account not active",
      "error": "Forbidden"
    }

    Returned by:Create a token

  • API authentication is not allowed for this account1 endpoint

    How to fix: The user's account does not list API in its authSchemes, so no magic link can be made for its users. authSchemes is set when the child account is created; contact us to change it. Create a child account

    {
      "message": "API authentication is not allowed for this account",
      "code": "API_AUTH_NOT_ALLOWED"
    }

    Returned by:Create a user magic link

  • API authentication is not allowed for this donor platform1 endpoint

    How to fix: The donor platform does not list API in its authSchemes. Disable the donor platform, then enable it again with API in authSchemes. Enable donor platform

    {
      "message": "API authentication is not allowed for this donor platform",
      "code": "API_AUTH_NOT_ALLOWED"
    }

    Returned by:Create a donor magic link

  • Billing delegation is not enabled for this account1 endpoint

    How to fix: With an API token, the billing link needs billing delegation: the account must be billed to itself (billedTo ACCOUNT) and your plan must include delegated billing. Contact us to enable it. Bill your business customers

    {
      "statusCode": 403,
      "message": "Billing delegation is not enabled for this account",
      "error": "Forbidden"
    }

    Returned by:Create a shareable billing link

  • Campaign is waiting for payment1 endpoint

    How to fix: The fixed budget of the campaign has been invoiced and is not paid yet. Pay the invoice, then activate. List invoices

    {
      "statusCode": 403,
      "message": "Campaign is waiting for payment",
      "error": "Forbidden"
    }

    Returned by:Activate a campaign

  • Can't delete yourself1 endpoint

    How to fix: A user session cannot delete its own user: another admin has to do it. An API token is not a user, so it never gets this error. Delete a user

    {
      "statusCode": 403,
      "message": "Can't delete yourself",
      "error": "Forbidden"
    }

    Returned by:Delete a user

  • Custom domain can't be updated for parent accounts1 endpoint

    How to fix: Accounts with account hierarchy can set a custom domain only on their child accounts: the accountId in the path is your own account. Use the site endpoints for your own domains. Update a site

    {
      "statusCode": 403,
      "message": "Custom domain can't be updated for parent accounts",
      "error": "Forbidden"
    }

    Returned by:Update an account

  • Donation already invoiced1 endpoint

    How to fix: The donation is on an invoice and cannot be deleted. Refund it in your own books; delete a donation before it is billed. Delete a donation

    {
      "statusCode": 403,
      "message": "Donation already invoiced",
      "error": "Forbidden"
    }

    Returned by:Delete a donation

  • Donation already paid1 endpoint

    How to fix: The invoice carrying this donation has been paid, so it cannot be deleted. Refund it in your own books. Delete a donation

    {
      "statusCode": 403,
      "message": "Donation already paid",
      "error": "Forbidden"
    }

    Returned by:Delete a donation

  • Donation already processed1 endpoint

    How to fix: The donation has reached the PROCESSED status and cannot be deleted. Refund it in your own books. Delete a donation

    {
      "statusCode": 403,
      "message": "Donation already processed",
      "error": "Forbidden"
    }

    Returned by:Delete a donation

  • Donation amount can't be updated as it has already been billed.1 endpoint

    How to fix: Once billed, the amount is final. Create a new donation for a different amount. Create a donation

    {
      "statusCode": 403,
      "message": "Donation amount can't be updated as it has already been billed.",
      "error": "Forbidden"
    }

    Returned by:Update a donation

  • Donation amount can't be updated as it has already been claimed.1 endpoint

    How to fix: Once claimed, the amount is final. Create a new donation for a different amount. Create a donation

    {
      "statusCode": 403,
      "message": "Donation amount can't be updated as it has already been claimed.",
      "error": "Forbidden"
    }

    Returned by:Update a donation

  • Donation amount can't be updated as it has been claimed, billed or its card posted.1 endpoint
    {
      "statusCode": 403,
      "message": "Donation amount can't be updated as it has been claimed, billed or its card posted.",
      "error": "Forbidden"
    }

    Returned by:Update a donation

  • Donation amount can't be updated as its card has already been posted.1 endpoint
    {
      "statusCode": 403,
      "message": "Donation amount can't be updated as its card has already been posted.",
      "error": "Forbidden"
    }

    Returned by:Update a donation

  • Donation card already posted1 endpoint
    {
      "statusCode": 403,
      "message": "Donation card already posted",
      "error": "Forbidden"
    }

    Returned by:Delete a donation

  • Donor is missing required fiscal information.1 endpoint

    How to fix: A fiscal receipt needs the donor's first name, last name, street, zip, city and country. Complete the donor, or set withFiscalReceipt to false. Your users give their own money

    {
      "statusCode": 403,
      "message": "Donor is missing required fiscal information.",
      "error": "Forbidden"
    }

    Returned by:Create a donation fiscal receipt

  • Donor platform is not enabled1 endpoint

    How to fix: The donor's account has no enabled donor platform. Enable it first, then retry. Enable donor platform

    {
      "statusCode": 403,
      "message": "Donor platform is not enabled",
      "error": "Forbidden"
    }

    Returned by:Create a donor magic link

  • New subdomain site can't be created1 endpoint

    How to fix: Accounts with account hierarchy cannot create a subdomain site. Create the site with customDomain; for a child account, the parent sets its subdomain with update-account. Update an account

    {
      "statusCode": 403,
      "message": "New subdomain site can't be created",
      "error": "Forbidden"
    }

    Returned by:Create a site

  • Only avaible for donation created with hasBeenCharged set to true.1 endpoint

    How to fix: A donor's fiscal receipt exists only for a donation the donor paid for. Create the donation with hasBeenCharged set to true, which needs the B2C use case on your account. Your users give their own money

    {
      "statusCode": 403,
      "message": "Only avaible for donation created with hasBeenCharged set to true.",
      "error": "Forbidden"
    }

    Returned by:Create a donation fiscal receipt

  • Only avaible for donation created with withFiscalReceipt set to true.1 endpoint

    How to fix: The donation was created without a fiscal receipt. Create it with withFiscalReceipt set to true, or leave the field out on a campaign that issues receipts. Your users give their own money

    {
      "statusCode": 403,
      "message": "Only avaible for donation created with withFiscalReceipt set to true.",
      "error": "Forbidden"
    }

    Returned by:Create a donation fiscal receipt

  • Only CUSTOM charities selections can be deleted1 endpoint

    How to fix: Only your CUSTOM selections can be deleted. GENERIC selections are shared by Charitips with every account and cannot be deleted. Charities and selections

    {
      "statusCode": 403,
      "message": "Only CUSTOM charities selections can be deleted",
      "error": "Forbidden"
    }

    Returned by:Delete a charities selection

  • Only draft or not billed pending campaigns can be deleted1 endpoint
    {
      "statusCode": 403,
      "message": "Only draft or not billed pending campaigns can be deleted",
      "error": "Forbidden"
    }

    Returned by:Delete a campaign

  • Only pending invites can be deleted1 endpoint

    How to fix: The invitation was already accepted or canceled. If it was accepted, delete the user instead. Delete a user

    {
      "statusCode": 403,
      "message": "Only pending invites can be deleted",
      "error": "Forbidden"
    }

    Returned by:Delete a user invitation

  • Recurring donations can only be created for recurring frequency campaigns.1 endpoint

    How to fix: Recurring donations need a campaign whose recurringType is FREQUENCY. Read the campaign to check it. recurringType cannot be set when you create a campaign: it comes from the campaign template. Monthly giving by your users

    {
      "statusCode": 403,
      "message": "Recurring donations can only be created for recurring frequency campaigns.",
      "error": "Forbidden"
    }

    Returned by:Create a recurring donation

  • Subdomain can't be updated1 endpoint

    How to fix: Accounts with account hierarchycannot change a site's subdomain here; customDomain can still be changed. For a child account, the parent sets the subdomain with update-account. Update an account

    {
      "statusCode": 403,
      "message": "Subdomain can't be updated",
      "error": "Forbidden"
    }

    Returned by:Update a site

  • Subdomain can't be updated for parent accounts1 endpoint

    How to fix: Accounts with account hierarchy can set a subdomain only on their child accounts: the accountId in the path is your own account. List child accounts

    {
      "statusCode": 403,
      "message": "Subdomain can't be updated for parent accounts",
      "error": "Forbidden"
    }

    Returned by:Update an account

  • The charities of this campaign cannot be customized1 endpoint

    How to fix: This campaign keeps the charities it was created with: its charitiesSelectionId cannot change. Leave the field out, or create a new campaign with your selection. Create a campaign

    {
      "statusCode": 403,
      "message": "The charities of this campaign cannot be customized",
      "error": "Forbidden"
    }

    Returned by:Update a campaign

  • This charity does not support fiscal receipts.1 endpoint

    How to fix: Not every charity can issue a receipt. Read fiscalReceiptsSupport on the charity before promising one: only ENABLED charities issue receipts. Get a charity

    {
      "statusCode": 403,
      "message": "This charity does not support fiscal receipts.",
      "error": "Forbidden"
    }

    Returned by:Create a donation fiscal receipt

  • Vote already billed1 endpoint

    How to fix: The vote is on an invoice and cannot be deleted. Delete a vote

    {
      "statusCode": 403,
      "message": "Vote already billed",
      "error": "Forbidden"
    }

    Returned by:Delete a vote

  • Vote already sent1 endpoint

    How to fix: The vote has been sent to the person and cannot be deleted. Delete a vote

    {
      "statusCode": 403,
      "message": "Vote already sent",
      "error": "Forbidden"
    }

    Returned by:Delete a vote

  • Vote already used1 endpoint

    How to fix: The vote has been cast and cannot be deleted. Delete a vote

    {
      "statusCode": 403,
      "message": "Vote already used",
      "error": "Forbidden"
    }

    Returned by:Delete a vote

404 Not Found

409 Conflict

  • Unique constraint failed on uniqueExternalId8 endpoints

    How to fix

    • Create a donation, Create a donor, Create a recurring donation, Create a vote: A resource with this uniqueExternalId already exists: your previous call succeeded. Fetch it with the list endpoint filtered by uniqueExternalId (donations, votes, donors) instead of creating it again; for recurring donations, keep the id you received at creation. List donations
    • Update a donation: Another donation of your account already uses this uniqueExternalId. Pick another id, or leave the field out of the update. List donations
    • Update a donor: Another donor of your account already uses this uniqueExternalId. Pick another id, or leave the field out of the update. List donors
    • Update a recurring donation: Another recurring donation of your account already uses this uniqueExternalId. Pick another id, or leave the field out of the update. List recurring donations
    • Update a vote: Another vote of your account already uses this uniqueExternalId. Pick another id, or leave the field out of the update. List votes
    {
      "statusCode": 409,
      "message": "Unique constraint failed on uniqueExternalId"
    }

    Returned by:Create a donationUpdate a donationCreate a donorUpdate a donorCreate a recurring donationUpdate a recurring donationCreate a voteUpdate a vote

  • Slug already used3 endpoints

    How to fix: Another campaign of your account already uses this slug. Pick another one.

    {
      "message": "Slug already used",
      "code": "slug_already_used"
    }

    Returned by:Enable donor platformCreate a campaignUpdate a campaign

  • Domain already exists1 endpoint

    How to fix: This subdomain or custom domain is already used by a Charitips site, possibly one of your own accounts. Pick another one, or detach it from the other site first. Create a child account

    {
      "message": "Domain already exists",
      "code": "domain_already_exist"
    }

    Returned by:Create a child account

  • Donation already claimed1 endpoint

    How to fix: The donation is no longer waiting for a claim: it is already linked to a charity, by your previous claim or automatically, or it was canceled. Read the donation: status and charityId tell which. Get a donation

    {
      "statusCode": 409,
      "message": "Donation already claimed",
      "error": "Conflict"
    }

    Returned by:Claim a donation

  • Donation already validated1 endpoint

    How to fix: The donation is no longer pending: it was validated already, it was done without validation because this campaign does not ask for it, or it was canceled. Read the donation to see its status. Get a donation

    {
      "statusCode": 409,
      "message": "Donation already validated",
      "error": "Conflict"
    }

    Returned by:Validate a donation

  • Invitation already exist1 endpoint

    How to fix: A pending invitation already exists for this email on this account. Update it or delete it instead of inviting again. List user invitations

    {
      "statusCode": 409,
      "message": "Invitation already exist",
      "error": "Conflict"
    }

    Returned by:Create an invitation

  • Recurring donation has been canceled1 endpoint

    How to fix: A canceled recurring donation cannot be claimed. Create a new one. Create a recurring donation

    {
      "statusCode": 409,
      "message": "Recurring donation has been canceled",
      "error": "Conflict"
    }

    Returned by:Claim a recurring donation

  • User already exist1 endpoint

    How to fix: A user with this email already belongs to this account. Update the user instead of inviting them. Update a user

    {
      "statusCode": 409,
      "message": "User already exist",
      "error": "Conflict"
    }

    Returned by:Create an invitation

  • Vote already casted1 endpoint

    How to fix: The vote has already been cast: your previous call succeeded. Get a vote

    {
      "statusCode": 409,
      "message": "Vote already casted",
      "error": "Conflict"
    }

    Returned by:Cast a vote

  • Vote already validated1 endpoint

    How to fix: The vote is no longer pending: it was validated already, or it was done when cast because this campaign does not ask for validation. Read the vote to see its status. Get a vote

    {
      "statusCode": 409,
      "message": "Vote already validated",
      "error": "Conflict"
    }

    Returned by:Validate a vote

429 Too Many Requests