{"openapi":"3.1.0","info":{"title":"Grantlas API","version":"v1","description":"The Grantlas public API, part of Grantlas Pro. Docs: https://grantlas.com/developers\n\nSend your key in the Authorization header as Bearer gl_live_… (the word Bearer can be any case). Never put a key in the URL: any query value that starts with gl_live_ is refused with key_in_url, even a valid key, and you should revoke that key. Errors are JSON: { error, message }."},"servers":[{"url":"https://api.grantlas.com/v1"}],"security":[{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","bearerFormat":"gl_live_…","description":"An API key from Settings → Integrations, sent as Authorization: Bearer gl_live_… (Bearer in any case). Keys in the URL are refused."}}},"paths":{"/me":{"get":{"summary":"Who am I","description":"The account and key you're using, and the limits that apply.","tags":["Account"],"x-grantlas-scope":"read","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"account":{"plan":"pro"},"key":{"name":"Airtable sync","prefix":"gl_live_ab12","scope":"read","created_at":"2026-09-01T16:00:00.000Z"},"limits":{"requests_per_minute_per_key":60,"requests_per_day_per_account":10000,"search_per_page_max":25,"search_depth_max":200,"list_per_page_max":100,"record_lookups_per_day":1000}}}}}},"400":{"description":"Bad request","content":{"application/json":{"examples":{"key_in_url":{"value":{"error":"key_in_url","message":"Send your API key in the Authorization header, never in the URL. Revoke this key in Settings → Integrations: it may now be in someone's logs."}}}}}},"401":{"description":"No key, or a key that isn't valid","content":{"application/json":{"examples":{"missing_key":{"value":{"error":"missing_key","message":"Send your API key as a header: Authorization: Bearer gl_live_…"}},"invalid_key":{"value":{"error":"invalid_key","message":"This API key isn't valid. It may have been revoked. Make a new one in Grantlas → Settings → Integrations."}}}}}},"403":{"description":"Not allowed","content":{"application/json":{"examples":{"plan_required":{"value":{"error":"plan_required","message":"The Grantlas API is part of a paid Grantlas Pro plan. Your keys work again as soon as the account is on paid Pro."}}}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"examples":{"rate_limited":{"value":{"error":"rate_limited","message":"This key has made 60 requests this minute. Wait and try again."}},"rate_limited_account":{"value":{"error":"rate_limited","message":"This account has made 10,000 requests in 24 hours. Wait and try again."}}}}}},"500":{"description":"Server error","content":{"application/json":{"examples":{"server_error":{"value":{"error":"server_error","message":"Something went wrong on our side. Try again in a minute."}}}}}}}}},"/orgs":{"get":{"summary":"List organizations","description":"Your organizations (a consultant's clients). Every other endpoint needs one of these ids.\n\nSorted by name. Ids look like org_3f9a1c0e7b2d4a61 and never change.","tags":["Account"],"x-grantlas-scope":"read","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":[{"id":"org_3f9a1c0e7b2d4a61","name":"Front Range Food Partners","ein":"84-2345678","city":"Denver","state":"CO"}]}}}},"400":{"description":"Bad request","content":{"application/json":{"examples":{"key_in_url":{"value":{"error":"key_in_url","message":"Send your API key in the Authorization header, never in the URL. Revoke this key in Settings → Integrations: it may now be in someone's logs."}}}}}},"401":{"description":"No key, or a key that isn't valid","content":{"application/json":{"examples":{"missing_key":{"value":{"error":"missing_key","message":"Send your API key as a header: Authorization: Bearer gl_live_…"}},"invalid_key":{"value":{"error":"invalid_key","message":"This API key isn't valid. It may have been revoked. Make a new one in Grantlas → Settings → Integrations."}}}}}},"403":{"description":"Not allowed","content":{"application/json":{"examples":{"plan_required":{"value":{"error":"plan_required","message":"The Grantlas API is part of a paid Grantlas Pro plan. Your keys work again as soon as the account is on paid Pro."}}}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"examples":{"rate_limited":{"value":{"error":"rate_limited","message":"This key has made 60 requests this minute. Wait and try again."}},"rate_limited_account":{"value":{"error":"rate_limited","message":"This account has made 10,000 requests in 24 hours. Wait and try again."}}}}}},"500":{"description":"Server error","content":{"application/json":{"examples":{"server_error":{"value":{"error":"server_error","message":"Something went wrong on our side. Try again in a minute."}}}}}}}}},"/orgs/{org}/tracker":{"get":{"summary":"List the Tracker","description":"The organization's Tracker, soonest deadline first. To keep another tool in sync, pass the time of your last sync as updated_since.\n\nItems with no deadline come last. With updated_since and no stage you get every stage, so moves to awarded or declined show up too. stage_label is the stage as the app shows it. deadline is YYYY-MM-DD. amount_requested is whole dollars. updated_at changes whenever the item changes, in the app or through the API.","tags":["Tracker"],"x-grantlas-scope":"read","parameters":[{"name":"org","in":"path","required":true,"description":"An organization id from GET /v1/orgs, like org_3f9a1c0e7b2d4a61.","schema":{"type":"string","pattern":"^org_[0-9a-f]{16}$","examples":["org_3f9a1c0e7b2d4a61"]}},{"name":"stage","in":"query","required":false,"description":"open (every stage before awarded or declined), closed (awarded and declined), all, or one stage. Anything else is a 400. Left out while updated_since is set, it means all.","schema":{"type":"string","enum":["open","closed","all","researching","loi","applying","submitted","awarded","declined"],"default":"open"}},{"name":"updated_since","in":"query","required":false,"description":"Only items changed at or after this date (2026-09-01) or time (2026-09-01T12:00:00Z, fractional seconds allowed), including changes made in the Grantlas app.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Page number, from 1.","schema":{"type":"integer","default":1,"minimum":1}},{"name":"per_page","in":"query","required":false,"description":"Items per page, 1 to 100.","schema":{"type":"integer","default":25,"minimum":1,"maximum":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":[{"id":"trk_8c2e5b17d94f0a3c","type":"funder","target_id":90211,"name":"Rocky Mountain Family Trust","stage":"loi","stage_label":"LOI","deadline":"2027-03-01","amount_requested":25000,"notes":"Program officer asked for a two-page LOI by email.","updated_at":"2026-09-29T15:30:00.000Z","url":"https://grantlas.com/funder/90211"}],"page":1,"per_page":25,"total":1,"total_pages":1}}}},"400":{"description":"Bad request","content":{"application/json":{"examples":{"key_in_url":{"value":{"error":"key_in_url","message":"Send your API key in the Authorization header, never in the URL. Revoke this key in Settings → Integrations: it may now be in someone's logs."}},"bad_request":{"value":{"error":"bad_request","message":"page must be 1 or more, and per_page between 1 and 100."}},"bad_stage":{"value":{"error":"bad_request","message":"stage must be one of: open, closed, all, researching, loi, applying, submitted, awarded, declined."}},"bad_updated_since":{"value":{"error":"bad_request","message":"updated_since must be a date (2026-09-01) or an ISO time (2026-09-01T12:00:00Z)."}}}}}},"401":{"description":"No key, or a key that isn't valid","content":{"application/json":{"examples":{"missing_key":{"value":{"error":"missing_key","message":"Send your API key as a header: Authorization: Bearer gl_live_…"}},"invalid_key":{"value":{"error":"invalid_key","message":"This API key isn't valid. It may have been revoked. Make a new one in Grantlas → Settings → Integrations."}}}}}},"403":{"description":"Not allowed","content":{"application/json":{"examples":{"plan_required":{"value":{"error":"plan_required","message":"The Grantlas API is part of a paid Grantlas Pro plan. Your keys work again as soon as the account is on paid Pro."}}}}}},"404":{"description":"Not found","content":{"application/json":{"examples":{"org_not_found":{"value":{"error":"org_not_found","message":"No organization with that id in this account. List yours with GET /v1/orgs."}}}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"examples":{"rate_limited":{"value":{"error":"rate_limited","message":"This key has made 60 requests this minute. Wait and try again."}},"rate_limited_account":{"value":{"error":"rate_limited","message":"This account has made 10,000 requests in 24 hours. Wait and try again."}}}}}},"500":{"description":"Server error","content":{"application/json":{"examples":{"server_error":{"value":{"error":"server_error","message":"Something went wrong on our side. Try again in a minute."}}}}}}}},"post":{"summary":"Track a funder or grant","description":"Adds a funder or grant to the Tracker at Researching and returns the new item.\n\nIf it's already tracked you get 200 with the existing item, and its stage isn't changed. 404 when Grantlas has no funder or grant with that id. stage_label is the stage as the app shows it. deadline is YYYY-MM-DD. amount_requested is whole dollars. updated_at changes whenever the item changes, in the app or through the API.","tags":["Tracker"],"x-grantlas-scope":"write","parameters":[{"name":"org","in":"path","required":true,"description":"An organization id from GET /v1/orgs, like org_3f9a1c0e7b2d4a61.","schema":{"type":"string","pattern":"^org_[0-9a-f]{16}$","examples":["org_3f9a1c0e7b2d4a61"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["funder","grant"],"description":"funder or grant."},"id":{"type":"integer","minimum":1,"description":"The funder's or grant's Grantlas id."}},"required":["type","id"]}}}},"responses":{"200":{"description":"Already tracked: the existing item, with its stage unchanged","content":{"application/json":{"example":{"data":{"id":"trk_8c2e5b17d94f0a3c","type":"funder","target_id":90211,"name":"Rocky Mountain Family Trust","stage":"researching","stage_label":"Researching","deadline":null,"amount_requested":null,"notes":null,"updated_at":"2026-09-22T10:15:00.000Z","url":"https://grantlas.com/funder/90211"}}}}},"201":{"description":"Created","content":{"application/json":{"example":{"data":{"id":"trk_8c2e5b17d94f0a3c","type":"funder","target_id":90211,"name":"Rocky Mountain Family Trust","stage":"researching","stage_label":"Researching","deadline":null,"amount_requested":null,"notes":null,"updated_at":"2026-09-22T10:15:00.000Z","url":"https://grantlas.com/funder/90211"}}}}},"400":{"description":"Bad request","content":{"application/json":{"examples":{"key_in_url":{"value":{"error":"key_in_url","message":"Send your API key in the Authorization header, never in the URL. Revoke this key in Settings → Integrations: it may now be in someone's logs."}},"bad_request":{"value":{"error":"bad_request","message":"Send a JSON object as the request body, with Content-Type: application/json."}}}}}},"401":{"description":"No key, or a key that isn't valid","content":{"application/json":{"examples":{"missing_key":{"value":{"error":"missing_key","message":"Send your API key as a header: Authorization: Bearer gl_live_…"}},"invalid_key":{"value":{"error":"invalid_key","message":"This API key isn't valid. It may have been revoked. Make a new one in Grantlas → Settings → Integrations."}}}}}},"403":{"description":"Not allowed","content":{"application/json":{"examples":{"plan_required":{"value":{"error":"plan_required","message":"The Grantlas API is part of a paid Grantlas Pro plan. Your keys work again as soon as the account is on paid Pro."}},"read_only_key":{"value":{"error":"read_only_key","message":"This key can only read. Make a key with “Read & Write” access in Settings → Integrations."}}}}}},"404":{"description":"Not found","content":{"application/json":{"examples":{"org_not_found":{"value":{"error":"org_not_found","message":"No organization with that id in this account. List yours with GET /v1/orgs."}},"not_found":{"value":{"error":"not_found","message":"No funder with id 90211 in Grantlas."}}}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"examples":{"rate_limited":{"value":{"error":"rate_limited","message":"This key has made 60 requests this minute. Wait and try again."}},"rate_limited_account":{"value":{"error":"rate_limited","message":"This account has made 10,000 requests in 24 hours. Wait and try again."}}}}}},"500":{"description":"Server error","content":{"application/json":{"examples":{"server_error":{"value":{"error":"server_error","message":"Something went wrong on our side. Try again in a minute."}}}}}}}}},"/orgs/{org}/tracker/{item}":{"patch":{"summary":"Update a Tracker item","description":"Change any of stage, deadline, amount requested and notes. If one field is wrong, nothing is saved.\n\nSend only the fields you want to change. stage_label is the stage as the app shows it. deadline is YYYY-MM-DD. amount_requested is whole dollars. updated_at changes whenever the item changes, in the app or through the API.","tags":["Tracker"],"x-grantlas-scope":"write","parameters":[{"name":"org","in":"path","required":true,"description":"An organization id from GET /v1/orgs, like org_3f9a1c0e7b2d4a61.","schema":{"type":"string","pattern":"^org_[0-9a-f]{16}$","examples":["org_3f9a1c0e7b2d4a61"]}},{"name":"item","in":"path","required":true,"description":"A Tracker item id (the id of each Tracker item), like trk_8c2e5b17d94f0a3c.","schema":{"type":"string","pattern":"^trk_[0-9a-f]{16}$","examples":["trk_8c2e5b17d94f0a3c"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stage":{"type":"string","enum":["researching","loi","applying","submitted","awarded","declined"],"description":"researching, loi, applying, submitted, awarded or declined."},"deadline":{"type":["string","null"],"description":"YYYY-MM-DD, or null to clear."},"amount_requested":{"type":["integer","null"],"minimum":0,"description":"Whole dollars, or null to clear."},"notes":{"type":["string","null"],"description":"Up to 2,000 characters, or null to clear."}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"id":"trk_8c2e5b17d94f0a3c","type":"funder","target_id":90211,"name":"Rocky Mountain Family Trust","stage":"loi","stage_label":"LOI","deadline":"2027-03-01","amount_requested":25000,"notes":"Program officer asked for a two-page LOI by email.","updated_at":"2026-09-29T15:30:00.000Z","url":"https://grantlas.com/funder/90211"}}}}},"400":{"description":"Bad request","content":{"application/json":{"examples":{"key_in_url":{"value":{"error":"key_in_url","message":"Send your API key in the Authorization header, never in the URL. Revoke this key in Settings → Integrations: it may now be in someone's logs."}},"bad_request":{"value":{"error":"bad_request","message":"Send a JSON object as the request body, with Content-Type: application/json."}},"invalid_field":{"value":{"error":"invalid_field","message":"stage must be one of: researching, loi, applying, submitted, awarded, declined."}}}}}},"401":{"description":"No key, or a key that isn't valid","content":{"application/json":{"examples":{"missing_key":{"value":{"error":"missing_key","message":"Send your API key as a header: Authorization: Bearer gl_live_…"}},"invalid_key":{"value":{"error":"invalid_key","message":"This API key isn't valid. It may have been revoked. Make a new one in Grantlas → Settings → Integrations."}}}}}},"403":{"description":"Not allowed","content":{"application/json":{"examples":{"plan_required":{"value":{"error":"plan_required","message":"The Grantlas API is part of a paid Grantlas Pro plan. Your keys work again as soon as the account is on paid Pro."}},"read_only_key":{"value":{"error":"read_only_key","message":"This key can only read. Make a key with “Read & Write” access in Settings → Integrations."}}}}}},"404":{"description":"Not found","content":{"application/json":{"examples":{"org_not_found":{"value":{"error":"org_not_found","message":"No organization with that id in this account. List yours with GET /v1/orgs."}},"not_found":{"value":{"error":"not_found","message":"No Tracker item with that id in this organization."}}}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"examples":{"rate_limited":{"value":{"error":"rate_limited","message":"This key has made 60 requests this minute. Wait and try again."}},"rate_limited_account":{"value":{"error":"rate_limited","message":"This account has made 10,000 requests in 24 hours. Wait and try again."}}}}}},"500":{"description":"Server error","content":{"application/json":{"examples":{"server_error":{"value":{"error":"server_error","message":"Something went wrong on our side. Try again in a minute."}}}}}}}},"delete":{"summary":"Untrack","description":"Removes the item from the Tracker. Its notes and dates go with it.","tags":["Tracker"],"x-grantlas-scope":"write","parameters":[{"name":"org","in":"path","required":true,"description":"An organization id from GET /v1/orgs, like org_3f9a1c0e7b2d4a61.","schema":{"type":"string","pattern":"^org_[0-9a-f]{16}$","examples":["org_3f9a1c0e7b2d4a61"]}},{"name":"item","in":"path","required":true,"description":"A Tracker item id (the id of each Tracker item), like trk_8c2e5b17d94f0a3c.","schema":{"type":"string","pattern":"^trk_[0-9a-f]{16}$","examples":["trk_8c2e5b17d94f0a3c"]}}],"responses":{"204":{"description":"No content"},"400":{"description":"Bad request","content":{"application/json":{"examples":{"key_in_url":{"value":{"error":"key_in_url","message":"Send your API key in the Authorization header, never in the URL. Revoke this key in Settings → Integrations: it may now be in someone's logs."}}}}}},"401":{"description":"No key, or a key that isn't valid","content":{"application/json":{"examples":{"missing_key":{"value":{"error":"missing_key","message":"Send your API key as a header: Authorization: Bearer gl_live_…"}},"invalid_key":{"value":{"error":"invalid_key","message":"This API key isn't valid. It may have been revoked. Make a new one in Grantlas → Settings → Integrations."}}}}}},"403":{"description":"Not allowed","content":{"application/json":{"examples":{"plan_required":{"value":{"error":"plan_required","message":"The Grantlas API is part of a paid Grantlas Pro plan. Your keys work again as soon as the account is on paid Pro."}},"read_only_key":{"value":{"error":"read_only_key","message":"This key can only read. Make a key with “Read & Write” access in Settings → Integrations."}}}}}},"404":{"description":"Not found","content":{"application/json":{"examples":{"org_not_found":{"value":{"error":"org_not_found","message":"No organization with that id in this account. List yours with GET /v1/orgs."}},"not_found":{"value":{"error":"not_found","message":"No Tracker item with that id in this organization."}}}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"examples":{"rate_limited":{"value":{"error":"rate_limited","message":"This key has made 60 requests this minute. Wait and try again."}},"rate_limited_account":{"value":{"error":"rate_limited","message":"This account has made 10,000 requests in 24 hours. Wait and try again."}}}}}},"500":{"description":"Server error","content":{"application/json":{"examples":{"server_error":{"value":{"error":"server_error","message":"Something went wrong on our side. Try again in a minute."}}}}}}}}},"/orgs/{org}/saved":{"get":{"summary":"Saved funders and grants","description":"Everything the organization has saved, newest first.\n\nfit is shown where it has already been analyzed; this list never starts an analysis. name is null once a record has left Grantlas. fit.status is scored (with score 0 to 100, label Great, Good, Okay or Bad, and a one-sentence reason), still_scoring (ask again in a minute), not_scored, or unavailable (this month's analysis allowance is used up). fit.stale is true when the fit is from before the organization's last profile change.","tags":["Saved"],"x-grantlas-scope":"read","parameters":[{"name":"org","in":"path","required":true,"description":"An organization id from GET /v1/orgs, like org_3f9a1c0e7b2d4a61.","schema":{"type":"string","pattern":"^org_[0-9a-f]{16}$","examples":["org_3f9a1c0e7b2d4a61"]}},{"name":"type","in":"query","required":false,"description":"funder or grant. Both when left out.","schema":{"type":"string","enum":["funder","grant"]}},{"name":"page","in":"query","required":false,"description":"Page number, from 1.","schema":{"type":"integer","default":1,"minimum":1}},{"name":"per_page","in":"query","required":false,"description":"Items per page, 1 to 100.","schema":{"type":"integer","default":25,"minimum":1,"maximum":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":[{"type":"grant","id":55120,"name":"Community Food Security Innovation Grants","saved_at":"2026-09-18T09:00:00.000Z","fit":{"status":"scored","score":81,"label":"Good","stale":false,"reason":"Supports community food access programs like your pantry network, at an award size you can manage."},"tracked":false,"url":"https://grantlas.com/grant/55120"}],"page":1,"per_page":25,"total":1,"total_pages":1}}}},"400":{"description":"Bad request","content":{"application/json":{"examples":{"key_in_url":{"value":{"error":"key_in_url","message":"Send your API key in the Authorization header, never in the URL. Revoke this key in Settings → Integrations: it may now be in someone's logs."}},"bad_request":{"value":{"error":"bad_request","message":"page must be 1 or more, and per_page between 1 and 100."}}}}}},"401":{"description":"No key, or a key that isn't valid","content":{"application/json":{"examples":{"missing_key":{"value":{"error":"missing_key","message":"Send your API key as a header: Authorization: Bearer gl_live_…"}},"invalid_key":{"value":{"error":"invalid_key","message":"This API key isn't valid. It may have been revoked. Make a new one in Grantlas → Settings → Integrations."}}}}}},"403":{"description":"Not allowed","content":{"application/json":{"examples":{"plan_required":{"value":{"error":"plan_required","message":"The Grantlas API is part of a paid Grantlas Pro plan. Your keys work again as soon as the account is on paid Pro."}}}}}},"404":{"description":"Not found","content":{"application/json":{"examples":{"org_not_found":{"value":{"error":"org_not_found","message":"No organization with that id in this account. List yours with GET /v1/orgs."}}}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"examples":{"rate_limited":{"value":{"error":"rate_limited","message":"This key has made 60 requests this minute. Wait and try again."}},"rate_limited_account":{"value":{"error":"rate_limited","message":"This account has made 10,000 requests in 24 hours. Wait and try again."}}}}}},"500":{"description":"Server error","content":{"application/json":{"examples":{"server_error":{"value":{"error":"server_error","message":"Something went wrong on our side. Try again in a minute."}}}}}}}}},"/orgs/{org}/deadlines":{"get":{"summary":"Upcoming deadlines","description":"Open Tracker items with a deadline in the next N days, soonest first.\n\nreminders says which reminder emails are set for that item: default (the standard schedule), custom, or off.","tags":["Deadlines"],"x-grantlas-scope":"read","parameters":[{"name":"org","in":"path","required":true,"description":"An organization id from GET /v1/orgs, like org_3f9a1c0e7b2d4a61.","schema":{"type":"string","pattern":"^org_[0-9a-f]{16}$","examples":["org_3f9a1c0e7b2d4a61"]}},{"name":"days","in":"query","required":false,"description":"How many days ahead to look, 1 to 365.","schema":{"type":"integer","default":60,"minimum":1,"maximum":365}}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":[{"date":"2027-03-01","tracker_item_id":"trk_8c2e5b17d94f0a3c","type":"funder","id":90211,"name":"Rocky Mountain Family Trust","stage":"loi","stage_label":"LOI","reminders":"default","url":"https://grantlas.com/funder/90211"}]}}}},"400":{"description":"Bad request","content":{"application/json":{"examples":{"key_in_url":{"value":{"error":"key_in_url","message":"Send your API key in the Authorization header, never in the URL. Revoke this key in Settings → Integrations: it may now be in someone's logs."}}}}}},"401":{"description":"No key, or a key that isn't valid","content":{"application/json":{"examples":{"missing_key":{"value":{"error":"missing_key","message":"Send your API key as a header: Authorization: Bearer gl_live_…"}},"invalid_key":{"value":{"error":"invalid_key","message":"This API key isn't valid. It may have been revoked. Make a new one in Grantlas → Settings → Integrations."}}}}}},"403":{"description":"Not allowed","content":{"application/json":{"examples":{"plan_required":{"value":{"error":"plan_required","message":"The Grantlas API is part of a paid Grantlas Pro plan. Your keys work again as soon as the account is on paid Pro."}}}}}},"404":{"description":"Not found","content":{"application/json":{"examples":{"org_not_found":{"value":{"error":"org_not_found","message":"No organization with that id in this account. List yours with GET /v1/orgs."}}}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"examples":{"rate_limited":{"value":{"error":"rate_limited","message":"This key has made 60 requests this minute. Wait and try again."}},"rate_limited_account":{"value":{"error":"rate_limited","message":"This account has made 10,000 requests in 24 hours. Wait and try again."}}}}}},"500":{"description":"Server error","content":{"application/json":{"examples":{"server_error":{"value":{"error":"server_error","message":"Something went wrong on our side. Try again in a minute."}}}}}}}}},"/orgs/{org}/saved-searches":{"get":{"summary":"List saved searches","description":"The organization's saved searches, newest first.\n\nfilters uses the same names as the search endpoints' filters. alerts is on or off. new_matches_supported is true for grant searches, the only kind the new-matches endpoint works with.","tags":["Saved searches"],"x-grantlas-scope":"read","parameters":[{"name":"org","in":"path","required":true,"description":"An organization id from GET /v1/orgs, like org_3f9a1c0e7b2d4a61.","schema":{"type":"string","pattern":"^org_[0-9a-f]{16}$","examples":["org_3f9a1c0e7b2d4a61"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":[{"id":"srch_51d7a0c9e3b86f24","name":"Food security grants for nonprofits","type":"grant","filters":{"keyword":"food security","eligibilityType":"nonprofit"},"alerts":"on","created_at":"2026-09-02T14:00:00.000Z","new_matches_supported":true,"url":"https://grantlas.com/saved-searches"}]}}}},"400":{"description":"Bad request","content":{"application/json":{"examples":{"key_in_url":{"value":{"error":"key_in_url","message":"Send your API key in the Authorization header, never in the URL. Revoke this key in Settings → Integrations: it may now be in someone's logs."}}}}}},"401":{"description":"No key, or a key that isn't valid","content":{"application/json":{"examples":{"missing_key":{"value":{"error":"missing_key","message":"Send your API key as a header: Authorization: Bearer gl_live_…"}},"invalid_key":{"value":{"error":"invalid_key","message":"This API key isn't valid. It may have been revoked. Make a new one in Grantlas → Settings → Integrations."}}}}}},"403":{"description":"Not allowed","content":{"application/json":{"examples":{"plan_required":{"value":{"error":"plan_required","message":"The Grantlas API is part of a paid Grantlas Pro plan. Your keys work again as soon as the account is on paid Pro."}}}}}},"404":{"description":"Not found","content":{"application/json":{"examples":{"org_not_found":{"value":{"error":"org_not_found","message":"No organization with that id in this account. List yours with GET /v1/orgs."}}}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"examples":{"rate_limited":{"value":{"error":"rate_limited","message":"This key has made 60 requests this minute. Wait and try again."}},"rate_limited_account":{"value":{"error":"rate_limited","message":"This account has made 10,000 requests in 24 hours. Wait and try again."}}}}}},"500":{"description":"Server error","content":{"application/json":{"examples":{"server_error":{"value":{"error":"server_error","message":"Something went wrong on our side. Try again in a minute."}}}}}}}}},"/orgs/{org}/saved-searches/{search}/matches":{"get":{"summary":"New matches for a saved search","description":"Grants matching a saved grant search that Grantlas first saw on or after a date or time. For a daily automation, pass the time exactly 24 hours ago, so no match is sent twice.\n\nThe organization's exclusions are applied. A funder search gets 400 funder_search_not_supported, because funder records have no posted date. fit is shown where it has already been analyzed. fit.status is scored (with score 0 to 100, label Great, Good, Okay or Bad, and a one-sentence reason), still_scoring (ask again in a minute), not_scored, or unavailable (this month's analysis allowance is used up). fit.stale is true when the fit is from before the organization's last profile change.","tags":["Saved searches"],"x-grantlas-scope":"read","parameters":[{"name":"org","in":"path","required":true,"description":"An organization id from GET /v1/orgs, like org_3f9a1c0e7b2d4a61.","schema":{"type":"string","pattern":"^org_[0-9a-f]{16}$","examples":["org_3f9a1c0e7b2d4a61"]}},{"name":"search","in":"path","required":true,"description":"A saved-search id from the list above, like srch_51d7a0c9e3b86f24.","schema":{"type":"string","pattern":"^srch_[0-9a-f]{16}$","examples":["srch_51d7a0c9e3b86f24"]}},{"name":"since","in":"query","required":true,"description":"A date (2026-09-01, the whole day included) or a time (2026-09-01T06:00:00Z). Grants first seen at or after it are included.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Page number, from 1.","schema":{"type":"integer","default":1,"minimum":1}},{"name":"per_page","in":"query","required":false,"description":"Items per page, 1 to 100.","schema":{"type":"integer","default":25,"minimum":1,"maximum":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":[{"id":55342,"title":"Rural Nutrition Access Partnership","agency":"Department of Agriculture","status":"open","funding_min":100000,"funding_max":500000,"deadline":"2026-12-28","fit":{"status":"scored","score":74,"label":"Good","stale":false,"reason":"Funds nutrition access in rural areas, which your mobile pantry serves."},"saved":false,"tracked":false,"url":"https://grantlas.com/grant/55342"}],"page":1,"per_page":25,"total":1,"total_pages":1}}}},"400":{"description":"Bad request","content":{"application/json":{"examples":{"key_in_url":{"value":{"error":"key_in_url","message":"Send your API key in the Authorization header, never in the URL. Revoke this key in Settings → Integrations: it may now be in someone's logs."}},"bad_request":{"value":{"error":"bad_request","message":"page must be 1 or more, and per_page between 1 and 100."}},"bad_since":{"value":{"error":"bad_request","message":"since is required: a date such as 2026-09-01."}},"funder_search_not_supported":{"value":{"error":"funder_search_not_supported","message":"New matches work for grant searches. Funder records don't have a posted date to compare against."}}}}}},"401":{"description":"No key, or a key that isn't valid","content":{"application/json":{"examples":{"missing_key":{"value":{"error":"missing_key","message":"Send your API key as a header: Authorization: Bearer gl_live_…"}},"invalid_key":{"value":{"error":"invalid_key","message":"This API key isn't valid. It may have been revoked. Make a new one in Grantlas → Settings → Integrations."}}}}}},"403":{"description":"Not allowed","content":{"application/json":{"examples":{"plan_required":{"value":{"error":"plan_required","message":"The Grantlas API is part of a paid Grantlas Pro plan. Your keys work again as soon as the account is on paid Pro."}}}}}},"404":{"description":"Not found","content":{"application/json":{"examples":{"org_not_found":{"value":{"error":"org_not_found","message":"No organization with that id in this account. List yours with GET /v1/orgs."}},"not_found":{"value":{"error":"not_found","message":"No saved search with that id in this organization."}}}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"examples":{"rate_limited":{"value":{"error":"rate_limited","message":"This key has made 60 requests this minute. Wait and try again."}},"rate_limited_account":{"value":{"error":"rate_limited","message":"This account has made 10,000 requests in 24 hours. Wait and try again."}}}}}},"500":{"description":"Server error","content":{"application/json":{"examples":{"server_error":{"value":{"error":"server_error","message":"Something went wrong on our side. Try again in a minute."}}}}}}}}},"/orgs/{org}/funders":{"get":{"summary":"Search funders","description":"Foundations and other grantmakers matching the filters, best Fit for this organization first. The organization's exclusions and hidden funders are left out.\n\nResults can take a few seconds while Grantlas analyzes them (up to about 15). Only the page you ask for is analyzed. Results stop at 200: total counts up to that, and total_matching is the real number of matches. sort_applied says which order you got. fit_within_page means the organization's first full analysis isn't finished yet, so results are in relevance order with each page sorted by fit, and sort_note says so. Because new results get analyzed as you page, the Fit order can shift slightly between pages: de-duplicate by id. Filter names you don't recognize from this list are ignored, as in the app. fit.status is scored (with score 0 to 100, label Great, Good, Okay or Bad, and a one-sentence reason), still_scoring (ask again in a minute), not_scored, or unavailable (this month's analysis allowance is used up). fit.stale is true when the fit is from before the organization's last profile change.","tags":["Funders"],"x-grantlas-scope":"read","parameters":[{"name":"org","in":"path","required":true,"description":"An organization id from GET /v1/orgs, like org_3f9a1c0e7b2d4a61.","schema":{"type":"string","pattern":"^org_[0-9a-f]{16}$","examples":["org_3f9a1c0e7b2d4a61"]}},{"name":"keyword","in":"query","required":false,"description":"Words in the funder's name, mission or giving.","schema":{"type":"string"}},{"name":"state","in":"query","required":false,"description":"Two-letter state, e.g. CO.","schema":{"type":"string"}},{"name":"city","in":"query","required":false,"description":"City.","schema":{"type":"string"}},{"name":"sector","in":"query","required":false,"description":"A cause area, as in the app's Cause filter, e.g. education or human-services.","schema":{"type":"string"}},{"name":"givingArea","in":"query","required":false,"description":"A giving area, as in the app's filter, e.g. health.","schema":{"type":"string"}},{"name":"accepts","in":"query","required":false,"description":"1 = only funders that accept unsolicited applications.","schema":{"type":"string","enum":["1"]}},{"name":"cycle","in":"query","required":false,"description":"year-round = funders with no deadline; dated = funders with a stated grant cycle. Either one also means they accept unsolicited applications.","schema":{"type":"string","enum":["year-round","dated"]}},{"name":"daf","in":"query","required":false,"description":"0 = leave out donor-advised funds.","schema":{"type":"string","enum":["0"]}},{"name":"minAssets","in":"query","required":false,"description":"Minimum assets, dollars.","schema":{"type":"integer","minimum":0}},{"name":"maxAssets","in":"query","required":false,"description":"Maximum assets, dollars.","schema":{"type":"integer","minimum":0}},{"name":"sort","in":"query","required":false,"description":"fit = best Fit first; relevance = the app's order.","schema":{"type":"string","enum":["fit","relevance"],"default":"fit"}},{"name":"page","in":"query","required":false,"description":"Page number, from 1.","schema":{"type":"integer","default":1,"minimum":1}},{"name":"per_page","in":"query","required":false,"description":"Results per page, 1 to 25. Results stop at 200, so page × per_page can't go past 200.","schema":{"type":"integer","default":25,"minimum":1,"maximum":25}}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":[{"id":90211,"name":"Rocky Mountain Family Trust","state":"CO","assets":48000000,"grant_size_band":"10k-50k","giving_areas":["human-services","health"],"accepts_unsolicited":true,"fit":{"status":"scored","score":88,"label":"Great","stale":false,"reason":"Funds food security and nutrition programs along Colorado's Front Range, where you work."},"saved":false,"tracked":true,"url":"https://grantlas.com/funder/90211"}],"page":1,"per_page":25,"total":38,"total_matching":38,"total_pages":2,"sort_applied":"fit"}}}},"400":{"description":"Bad request","content":{"application/json":{"examples":{"key_in_url":{"value":{"error":"key_in_url","message":"Send your API key in the Authorization header, never in the URL. Revoke this key in Settings → Integrations: it may now be in someone's logs."}},"bad_request":{"value":{"error":"bad_request","message":"page must be 1 or more, and per_page between 1 and 25."}},"too_deep":{"value":{"error":"too_deep","message":"Search results stop at 200. Narrow the search with more filters."}}}}}},"401":{"description":"No key, or a key that isn't valid","content":{"application/json":{"examples":{"missing_key":{"value":{"error":"missing_key","message":"Send your API key as a header: Authorization: Bearer gl_live_…"}},"invalid_key":{"value":{"error":"invalid_key","message":"This API key isn't valid. It may have been revoked. Make a new one in Grantlas → Settings → Integrations."}}}}}},"403":{"description":"Not allowed","content":{"application/json":{"examples":{"plan_required":{"value":{"error":"plan_required","message":"The Grantlas API is part of a paid Grantlas Pro plan. Your keys work again as soon as the account is on paid Pro."}}}}}},"404":{"description":"Not found","content":{"application/json":{"examples":{"org_not_found":{"value":{"error":"org_not_found","message":"No organization with that id in this account. List yours with GET /v1/orgs."}}}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"examples":{"rate_limited":{"value":{"error":"rate_limited","message":"This key has made 60 requests this minute. Wait and try again."}},"rate_limited_account":{"value":{"error":"rate_limited","message":"This account has made 10,000 requests in 24 hours. Wait and try again."}}}}}},"500":{"description":"Server error","content":{"application/json":{"examples":{"server_error":{"value":{"error":"server_error","message":"Something went wrong on our side. Try again in a minute."}}}}}}}}},"/orgs/{org}/funders/{id}":{"get":{"summary":"A funder","description":"One funder's full profile, with Fit and red flags for this organization.\n\nmetrics is null when Grantlas has no giving data for the funder. giving_by_year is newest first. red_flags lists plain warnings such as \"Invitation only\" or \"Giving sharply declining\", and is empty when there are none. Analyzed now if needed, within your plan's monthly allowance, which can take a few seconds. Records the organization hasn't saved or tracked count toward the limit of 1,000 lookups a day per account. fit.status is scored (with score 0 to 100, label Great, Good, Okay or Bad, and a one-sentence reason), still_scoring (ask again in a minute), not_scored, or unavailable (this month's analysis allowance is used up). fit.stale is true when the fit is from before the organization's last profile change.","tags":["Funders"],"x-grantlas-scope":"read","parameters":[{"name":"org","in":"path","required":true,"description":"An organization id from GET /v1/orgs, like org_3f9a1c0e7b2d4a61.","schema":{"type":"string","pattern":"^org_[0-9a-f]{16}$","examples":["org_3f9a1c0e7b2d4a61"]}},{"name":"id","in":"path","required":true,"description":"The funder's Grantlas id (in every funder result).","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"id":90211,"ein":"84-1234567","name":"Rocky Mountain Family Trust","city":"Denver","state":"CO","assets":48000000,"grant_size_band":"10k-50k","accepts_unsolicited":true,"description":"A family foundation supporting food security, health and youth programs along Colorado's Front Range.","giving_areas":["human-services","health"],"application_info":"Send a two-page letter of inquiry by email. Full proposals are by invitation after the letter is reviewed.","submission_deadlines":"March 1 and September 1","award_restrictions":"No grants to individuals or for capital campaigns.","officers":[{"name":"Margaret Ellison","title":"Executive Director"}],"year_founded":1987,"ntee_code":"T20","metrics":{"median_grant":30000,"low_grant":5000,"high_grant":150000,"grants_per_year":24,"trend_3yr":1.11,"geo_concentration":0.92,"new_grantee_rate":0.27},"giving_by_year":[{"year":2024,"total":840000,"count":22},{"year":2023,"total":790000,"count":24},{"year":2022,"total":760000,"count":26}],"fit":{"status":"scored","score":88,"label":"Great","stale":false,"reason":"Funds food security and nutrition programs along Colorado's Front Range, where you work."},"red_flags":[],"saved":false,"tracked":true,"hidden":false,"url":"https://grantlas.com/funder/90211"}}}}},"400":{"description":"Bad request","content":{"application/json":{"examples":{"key_in_url":{"value":{"error":"key_in_url","message":"Send your API key in the Authorization header, never in the URL. Revoke this key in Settings → Integrations: it may now be in someone's logs."}}}}}},"401":{"description":"No key, or a key that isn't valid","content":{"application/json":{"examples":{"missing_key":{"value":{"error":"missing_key","message":"Send your API key as a header: Authorization: Bearer gl_live_…"}},"invalid_key":{"value":{"error":"invalid_key","message":"This API key isn't valid. It may have been revoked. Make a new one in Grantlas → Settings → Integrations."}}}}}},"403":{"description":"Not allowed","content":{"application/json":{"examples":{"plan_required":{"value":{"error":"plan_required","message":"The Grantlas API is part of a paid Grantlas Pro plan. Your keys work again as soon as the account is on paid Pro."}}}}}},"404":{"description":"Not found","content":{"application/json":{"examples":{"org_not_found":{"value":{"error":"org_not_found","message":"No organization with that id in this account. List yours with GET /v1/orgs."}},"not_found":{"value":{"error":"not_found","message":"No funder with that id in Grantlas."}}}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"examples":{"rate_limited":{"value":{"error":"rate_limited","message":"This key has made 60 requests this minute. Wait and try again."}},"rate_limited_account":{"value":{"error":"rate_limited","message":"This account has made 10,000 requests in 24 hours. Wait and try again."}},"record_limit":{"value":{"error":"record_limit","message":"This account has looked up 1,000 funders and grants it hasn't saved or tracked in 24 hours. Saved and tracked ones still work."}}}}}},"500":{"description":"Server error","content":{"application/json":{"examples":{"server_error":{"value":{"error":"server_error","message":"Something went wrong on our side. Try again in a minute."}}}}}}}}},"/orgs/{org}/grants":{"get":{"summary":"Search grants","description":"Grant opportunities matching the filters, best Fit for this organization first. The organization's exclusions are applied.\n\nsort=deadline leaves out grants with no deadline or a past deadline, which lowers total_matching. Results can take a few seconds while Grantlas analyzes them (up to about 15). Only the page you ask for is analyzed. Results stop at 200: total counts up to that, and total_matching is the real number of matches. sort_applied says which order you got. fit_within_page means the organization's first full analysis isn't finished yet, so results are in relevance order with each page sorted by fit, and sort_note says so. Because new results get analyzed as you page, the Fit order can shift slightly between pages: de-duplicate by id. Filter names you don't recognize from this list are ignored, as in the app. fit.status is scored (with score 0 to 100, label Great, Good, Okay or Bad, and a one-sentence reason), still_scoring (ask again in a minute), not_scored, or unavailable (this month's analysis allowance is used up). fit.stale is true when the fit is from before the organization's last profile change.","tags":["Grants"],"x-grantlas-scope":"read","parameters":[{"name":"org","in":"path","required":true,"description":"An organization id from GET /v1/orgs, like org_3f9a1c0e7b2d4a61.","schema":{"type":"string","pattern":"^org_[0-9a-f]{16}$","examples":["org_3f9a1c0e7b2d4a61"]}},{"name":"keyword","in":"query","required":false,"description":"Words in the title or description.","schema":{"type":"string"}},{"name":"agency","in":"query","required":false,"description":"Funding agency, as grants.gov names it.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"open or closed. Both when left out.","schema":{"type":"string","enum":["open","closed"]}},{"name":"eligibilityType","in":"query","required":false,"description":"Who can apply: nonprofit, government, education, individual or other.","schema":{"type":"string","enum":["nonprofit","government","education","individual","other"]}},{"name":"minFunding","in":"query","required":false,"description":"Minimum award, dollars.","schema":{"type":"integer","minimum":0}},{"name":"maxFunding","in":"query","required":false,"description":"Maximum award, dollars.","schema":{"type":"integer","minimum":0}},{"name":"deadlineFrom","in":"query","required":false,"description":"Deadline on or after, YYYY-MM-DD.","schema":{"type":"string"}},{"name":"deadlineTo","in":"query","required":false,"description":"Deadline on or before, YYYY-MM-DD.","schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"description":"fit = best Fit first; relevance = the app's order; deadline = upcoming deadlines, soonest first; grants with no deadline or a past deadline are left out.","schema":{"type":"string","enum":["fit","relevance","deadline"],"default":"fit"}},{"name":"page","in":"query","required":false,"description":"Page number, from 1.","schema":{"type":"integer","default":1,"minimum":1}},{"name":"per_page","in":"query","required":false,"description":"Results per page, 1 to 25. Results stop at 200, so page × per_page can't go past 200.","schema":{"type":"integer","default":25,"minimum":1,"maximum":25}}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":[{"id":55120,"title":"Community Food Security Innovation Grants","agency":"Health Resources and Services Administration","status":"open","funding_min":50000,"funding_max":250000,"deadline":"2026-11-13","fit":{"status":"scored","score":81,"label":"Good","stale":false,"reason":"Supports community food access programs like your pantry network, at an award size you can manage."},"saved":true,"tracked":false,"url":"https://grantlas.com/grant/55120"}],"page":1,"per_page":25,"total":12,"total_matching":12,"total_pages":1,"sort_applied":"fit"}}}},"400":{"description":"Bad request","content":{"application/json":{"examples":{"key_in_url":{"value":{"error":"key_in_url","message":"Send your API key in the Authorization header, never in the URL. Revoke this key in Settings → Integrations: it may now be in someone's logs."}},"bad_request":{"value":{"error":"bad_request","message":"page must be 1 or more, and per_page between 1 and 25."}},"too_deep":{"value":{"error":"too_deep","message":"Search results stop at 200. Narrow the search with more filters."}}}}}},"401":{"description":"No key, or a key that isn't valid","content":{"application/json":{"examples":{"missing_key":{"value":{"error":"missing_key","message":"Send your API key as a header: Authorization: Bearer gl_live_…"}},"invalid_key":{"value":{"error":"invalid_key","message":"This API key isn't valid. It may have been revoked. Make a new one in Grantlas → Settings → Integrations."}}}}}},"403":{"description":"Not allowed","content":{"application/json":{"examples":{"plan_required":{"value":{"error":"plan_required","message":"The Grantlas API is part of a paid Grantlas Pro plan. Your keys work again as soon as the account is on paid Pro."}}}}}},"404":{"description":"Not found","content":{"application/json":{"examples":{"org_not_found":{"value":{"error":"org_not_found","message":"No organization with that id in this account. List yours with GET /v1/orgs."}}}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"examples":{"rate_limited":{"value":{"error":"rate_limited","message":"This key has made 60 requests this minute. Wait and try again."}},"rate_limited_account":{"value":{"error":"rate_limited","message":"This account has made 10,000 requests in 24 hours. Wait and try again."}}}}}},"500":{"description":"Server error","content":{"application/json":{"examples":{"server_error":{"value":{"error":"server_error","message":"Something went wrong on our side. Try again in a minute."}}}}}}}}},"/orgs/{org}/grants/{id}":{"get":{"summary":"A grant","description":"One grant in full, with Fit and an eligibility check for this organization.\n\neligibility is null until the grant has been checked for this organization. Its verdict is yes, no or unclear, with the reasoning and, when there is one, the requirement it turns on. Analyzed now if needed, within your plan's monthly allowance, which can take a few seconds. Records the organization hasn't saved or tracked count toward the limit of 1,000 lookups a day per account. fit.status is scored (with score 0 to 100, label Great, Good, Okay or Bad, and a one-sentence reason), still_scoring (ask again in a minute), not_scored, or unavailable (this month's analysis allowance is used up). fit.stale is true when the fit is from before the organization's last profile change.","tags":["Grants"],"x-grantlas-scope":"read","parameters":[{"name":"org","in":"path","required":true,"description":"An organization id from GET /v1/orgs, like org_3f9a1c0e7b2d4a61.","schema":{"type":"string","pattern":"^org_[0-9a-f]{16}$","examples":["org_3f9a1c0e7b2d4a61"]}},{"name":"id","in":"path","required":true,"description":"The grant's Grantlas id.","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"id":55120,"title":"Community Food Security Innovation Grants","agency":"Health Resources and Services Administration","status":"open","opportunity_number":"HRSA-27-041","funding_min":50000,"funding_max":250000,"deadline":"2026-11-13","posted":"2026-09-19","eligible_applicants":["Nonprofits with 501(c)(3) status"],"eligibility_text":"Nonprofit organizations with 501(c)(3) status that run community food programs.","description":"Supports community organizations expanding emergency food access and nutrition education in underserved areas.","fit":{"status":"scored","score":81,"label":"Good","stale":false,"reason":"Supports community food access programs like your pantry network, at an award size you can manage."},"eligibility":{"verdict":"yes","stale":false,"reasoning":"You're a 501(c)(3) running a food pantry network, which is who this grant is for.","requirement":"501(c)(3) nonprofit with community food programs"},"saved":true,"tracked":false,"url":"https://grantlas.com/grant/55120"}}}}},"400":{"description":"Bad request","content":{"application/json":{"examples":{"key_in_url":{"value":{"error":"key_in_url","message":"Send your API key in the Authorization header, never in the URL. Revoke this key in Settings → Integrations: it may now be in someone's logs."}}}}}},"401":{"description":"No key, or a key that isn't valid","content":{"application/json":{"examples":{"missing_key":{"value":{"error":"missing_key","message":"Send your API key as a header: Authorization: Bearer gl_live_…"}},"invalid_key":{"value":{"error":"invalid_key","message":"This API key isn't valid. It may have been revoked. Make a new one in Grantlas → Settings → Integrations."}}}}}},"403":{"description":"Not allowed","content":{"application/json":{"examples":{"plan_required":{"value":{"error":"plan_required","message":"The Grantlas API is part of a paid Grantlas Pro plan. Your keys work again as soon as the account is on paid Pro."}}}}}},"404":{"description":"Not found","content":{"application/json":{"examples":{"org_not_found":{"value":{"error":"org_not_found","message":"No organization with that id in this account. List yours with GET /v1/orgs."}},"not_found":{"value":{"error":"not_found","message":"No grant with that id in Grantlas."}}}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"examples":{"rate_limited":{"value":{"error":"rate_limited","message":"This key has made 60 requests this minute. Wait and try again."}},"rate_limited_account":{"value":{"error":"rate_limited","message":"This account has made 10,000 requests in 24 hours. Wait and try again."}},"record_limit":{"value":{"error":"record_limit","message":"This account has looked up 1,000 funders and grants it hasn't saved or tracked in 24 hours. Saved and tracked ones still work."}}}}}},"500":{"description":"Server error","content":{"application/json":{"examples":{"server_error":{"value":{"error":"server_error","message":"Something went wrong on our side. Try again in a minute."}}}}}}}}}}}